@aintela/chat 0.2.18 → 0.2.22
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/dist/{auth-CcTgInbY.js → auth-DbmLacBc.js} +2 -2
- package/dist/{auth-CcTgInbY.js.map → auth-DbmLacBc.js.map} +1 -1
- package/dist/components.js +5868 -5530
- package/dist/components.js.map +1 -1
- package/dist/hooks.js +5 -4
- package/dist/{httpArtifactService-BAR60Gu1.js → httpArtifactService-Dh9LGQ9a.js} +2 -2
- package/dist/{httpArtifactService-BAR60Gu1.js.map → httpArtifactService-Dh9LGQ9a.js.map} +1 -1
- package/dist/index.js +126 -122
- package/dist/{sortable-table-DgQHxWIh.js → promptHighlight-BHSQkdFs.js} +330 -282
- package/dist/promptHighlight-BHSQkdFs.js.map +1 -0
- package/dist/services.js +1 -1
- package/dist/src/components/AiChat/AiChatContext.d.ts +14 -2
- package/dist/src/components/AiChat/AiChatTypes.d.ts +28 -0
- package/dist/src/components/AiChat/ChatPane/AskUserSheet.d.ts +2 -1
- package/dist/src/components/AiChat/ChatPane/GuestIcon.d.ts +19 -0
- package/dist/src/components/AiChat/ChatPane/parts/AskAuthPart.d.ts +8 -0
- package/dist/src/components/AiChat/ChatPane/parts/types.d.ts +6 -1
- package/dist/src/components/index.d.ts +1 -1
- package/dist/src/components/v2/PromptDateMarkers.d.ts +15 -0
- package/dist/src/components/v2/PromptV2.d.ts +18 -0
- package/dist/src/components/v2/index.d.ts +2 -0
- package/dist/src/hooks/index.d.ts +2 -0
- package/dist/src/hooks/usePromptAssist.d.ts +58 -0
- package/dist/src/services/httpPromptAssistService.d.ts +58 -0
- package/dist/src/utils/index.d.ts +2 -0
- package/dist/src/utils/promptHighlight.d.ts +16 -0
- package/dist/useContainerWidth-DsNHNR-z.js +187 -0
- package/dist/useContainerWidth-DsNHNR-z.js.map +1 -0
- package/dist/utils.js +34 -32
- package/package.json +1 -1
- package/dist/sortable-table-DgQHxWIh.js.map +0 -1
- package/dist/useContainerWidth-Df2PmSoC.js +0 -52
- package/dist/useContainerWidth-Df2PmSoC.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var B = Object.defineProperty;
|
|
2
2
|
var r = (e, t) => B(e, "name", { value: t, configurable: !0 });
|
|
3
3
|
import { k as E, d as C, n as g } from "./environmentUtils-BaKw5_VD.js";
|
|
4
|
-
import {
|
|
4
|
+
import { f as y } from "./promptHighlight-BHSQkdFs.js";
|
|
5
5
|
const L = "https://agent.tripapi.com.br", T = "http://localagent:8000", se = /* @__PURE__ */ r((e) => new URLSearchParams(e.location.search).get("local") === "true" ? T : E() ?? L, "getAgentBaseUrl"), O = "https://storage.googleapis.com/aibi_artifacts_bucket", ce = /* @__PURE__ */ r(() => O, "getArtifactsBaseUrl"), h = {}, P = (h == null ? void 0 : h.VITE_CADDY) == "true";
|
|
6
6
|
function le() {
|
|
7
7
|
const e = P ? "http://wsserver.localhost" : "http://localhost:8000";
|
|
@@ -521,4 +521,4 @@ export {
|
|
|
521
521
|
ye as u,
|
|
522
522
|
xe as v
|
|
523
523
|
};
|
|
524
|
-
//# sourceMappingURL=auth-
|
|
524
|
+
//# sourceMappingURL=auth-DbmLacBc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-CcTgInbY.js","sources":["../src/utils/getAgentBaseUrl.ts","../src/utils/getAgentArtifactsBaseUrl.ts","../src/utils/getDotNetBaseUrl.ts","../src/utils/objectUtils.ts","../src/utils/fileUtils.ts","../node_modules/js-base64/base64.mjs","../src/utils/jsonDetector.ts","../src/utils/parseArtifact.ts","../src/utils/uriUtils.ts","../src/utils/sessionWindowParameters.ts","../src/utils/materialIconsList.ts","../src/utils/auth.ts"],"sourcesContent":["import { agentBaseUrlOverride } from './envOverrides';\n\nconst base_production_url = \"https://agent.tripapi.com.br\";\nconst base_url_local = \"http://localagent:8000\";\n\nexport const getAgentBaseUrl = (window: any): string => {\n const urlParams = new URLSearchParams(window.location.search);\n const isLocal = urlParams.get('local') === 'true';\n\n return isLocal ? base_url_local : (agentBaseUrlOverride() ?? base_production_url);\n}","//const GCS_BUCKET_IMAGE_PATH = \"https://storage.googleapis.com/ebi_artifacts_public\"\nconst GCS_BUCKET_IMAGE_PATH = \"https://storage.googleapis.com/aibi_artifacts_bucket\"\n\n\nexport const getArtifactsBaseUrl = (): string => {\n return GCS_BUCKET_IMAGE_PATH;\n}","import { agentBaseUrlOverride } from './envOverrides';\n\nconst runningOnCaddy = ((import.meta as any).env?.VITE_CADDY as string) == \"true\";\n\n\n/**\n * Gets the base URL for the .NET backend API\n * Used for Agent and Plugin services that communicate directly with the .NET server\n */\nexport function getDotNetBaseUrl(): string {\n const localHostUrl = runningOnCaddy ? \"http://wsserver.localhost\" : \"http://localhost:8000\"\n\n\n // Check if we're in a browser environment\n if (typeof window !== 'undefined' && window?.location) {\n const location = window.location.host.toLowerCase();\n\n // When loaded from inside a Docker container (e.g. Puppeteer in ai-worker)\n // the page is served from host.docker.internal. The .NET API is also on the\n // host machine, so we must route through host.docker.internal as well.\n if (location.indexOf('docker.internal') > -1) {\n return 'http://host.docker.internal:8000';\n }\n\n if (location.indexOf('localhost') > -1) {\n\n return localHostUrl;\n }\n\n // Production - the deploy-time override (e.g. staging) or the prod default\n return agentBaseUrlOverride() ?? 'https://agent.tripapi.com.br';\n }\n\n // Server-side rendering or Node.js environment\n if (typeof process !== 'undefined' && process.env) {\n\n return process.env.AGENT_BASE_URL || process.env.DOTNET_API_URL || localHostUrl;\n }\n\n return localHostUrl;\n}\n","export function dateReviver(_key: any, value: any) {\n // A regex to test for the ISO 8601 date format.\n // This is a robust way to identify date strings for parsing.\n const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z$/;\n\n // If the value is a string that matches the ISO format,\n // convert it back to a Date object.\n if (typeof value === 'string' && isoDateRegex.test(value)) {\n return new Date(value);\n }\n\n // Otherwise, return the original value unchanged.\n return value;\n}\n\n/**\n * Utility functions for object operations\n */\n\n/**\n * Returns the first property name that has a non-null value\n * @param obj - The object to search through\n * @returns The property name or null if all properties are null\n */\nexport function findFirstNonNullProperty<T extends Record<string, any>>(obj: T): keyof T | null {\n if (!obj)\n return null;\n\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null && value !== undefined) {\n return key as keyof T;\n }\n }\n return null;\n}\n\n/**\n * Returns the first property name and value that is not null\n * @param obj - The object to search through\n * @returns Object with property name and value, or null if all properties are null\n */\nexport function findFirstNonNullPropertyWithValue<T extends Record<string, any>>(obj: T): { key: keyof T; value: any } | null {\n if (!obj)\n return null;\n\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null && value !== undefined) {\n return { key: key as keyof T, value };\n }\n }\n return null;\n}\n\n/**\n * Returns all property names that have non-null values\n * @param obj - The object to search through\n * @returns Array of property names with non-null values\n */\nexport function findAllNonNullNonEmptyProperties<T extends Record<string, any>>(obj: T): (keyof T)[] {\n if (!obj)\n return [];\n\n return Object.entries(obj)\n .filter(([_, value]) => value !== null && value !== undefined && value !== \"\")\n .map(([key]) => key as keyof T);\n}\n\n/**\n * Returns an object with only the non-null properties\n * @param obj - The object to filter\n * @returns New object with only non-null properties\n */\nexport function filterNonNullProperties<T extends Record<string, any>>(obj: T): Partial<T> {\n const result: Partial<T> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null && value !== undefined) {\n result[key as keyof T] = value;\n }\n }\n return result;\n} ","/**\n * Normalizes a filename by removing special characters\n * @param text - The input text to normalize\n * @returns The normalized text\n */\nexport function normalizeFilename(text: string): string {\n // Normalize Unicode characters (NFD decomposition)\n // This separates base characters from their accents\n let normalized = text.normalize(\"NFD\");\n\n // Remove all characters except alphanumeric, spaces, hyphens, and underscores\n normalized = normalized.replace(/[^a-zA-Z0-9\\s\\-_.]/g, \"\");\n\n return normalized;\n}","/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.8';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, r1, r2;\n let binArray = []; // use array to avoid minor gc in loop\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n if (r1 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255));\n }\n else if (r2 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255));\n }\n else {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255));\n }\n }\n return binArray.join('');\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n","import { decode, encode, isValid } from 'js-base64';\nimport type { ArtifactType } from '../models/enums';\n\nexport interface ArtifactJson {\n description?: string;\n reasoning?: string;\n type?: ArtifactType;\n file_name?: string;\n mime_type?: string;\n data?: string;\n}\n\n\n// function b64_to_utf8(str: string) {\n// str = str.replace(/\\s/g, '');\n// return decodeURIComponent(escape(window.atob(str)));\n// }\n\n// // Decode Base64 data to Array\n// function base64ToArray(base64: any) {\n// const binaryString = b64_to_utf8(base64);\n// const len = binaryString.length;\n// const bytes = new Uint8Array(len);\n// for (let i = 0; i < len; i++) {\n// bytes[i] = binaryString.charCodeAt(i);\n// }\n// return bytes.buffer;\n// }\n\n// function arrayToString(uint8Array: any) {\n// const decoder = new TextDecoder('utf-8');\n// const decodedString = decoder.decode(uint8Array);\n\n// return decodedString\n// }\n\n// function isBase64(base64: string): boolean {\n// return /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/.test(base64);\n// }\n\nexport function decodeBase64(base64: string): string {\n return decode(decodeURIComponent(base64));\n}\n\nexport function encodeBase64(base64: string): string {\n return encodeURIComponent(encode(base64));\n}\n\n\nexport function decodeUriFromPython(uriEncoded: string): string {\n try {\n return decodeURIComponent(uriEncoded);\n } catch (error) {\n console.warn('Failed to decode uri:', error);\n return uriEncoded; // Return original if decoding fails\n }\n}\n\nexport function isBase64Encoded(base64: string): boolean {\n return isValid(decodeURIComponent(base64));\n}\n\n\n/**\n * Checks if a string contains a valid JSON document with the specified signature\n * @param text - The text to check for JSON content\n * @param signature - The expected JSON structure (optional, defaults to ArtifactSignature)\n * @returns Object with success status and parsed data if found\n */\nexport function detectAndParseJson<T = ArtifactJson>(\n text: string\n): { success: boolean; data?: T; error?: string } {\n if (!text || typeof text !== 'string') {\n return { success: false, error: 'Invalid input: text must be a non-empty string' };\n }\n\n try {\n // Look for JSON patterns in the text\n const jsonMatches = findJsonInText(text);\n\n\n\n for (const match of jsonMatches) {\n try {\n const matchTextCleaned = match.replaceAll(/(?<!\\\\)\\n/g, ' '); //Only the unscaped line breaks\n let parsed = null;\n\n try {\n parsed = JSON.parse(matchTextCleaned);\n }\n catch (parseError) {\n\n continue;\n }\n\n\n\n // If no specific signature provided, just validate it's an object\n if (typeof parsed === 'object' && parsed !== null && typeof parsed.media_data === 'string') {\n try {\n parsed.media_data = decodeBase64(parsed.media_data);\n } catch (error) {\n\n }\n\n parsed.media_data = parsed.media_data;\n\n\n return { success: true, data: parsed as T };\n }\n else\n continue;\n\n } catch (parseError) {\n\n }\n }\n\n return { success: false, error: 'No valid JSON found matching the signature' };\n } catch (error) {\n return { success: false, error: `Detection failed: ${error}` };\n }\n}\n\n/**\n * Finds all potential JSON strings within a text\n * @param text - The text to search\n * @returns Array of potential JSON strings\n */\nfunction findJsonInText(text: string): string[] {\n const matches: string[] = [];\n\n // Pattern 1: ```json {...}```\n const jsonPattern = /```json([\\s\\S]*?)```/g;\n let matchJson;\n while ((matchJson = jsonPattern.exec(text)) !== null) {\n matches.push(matchJson[1].trim().replaceAll(\"json\", \"\").replaceAll(\"```\", \"\"));\n }\n\n // Pattern 2: JSON wrapped in code blocks (```{...}```)\n const codeBlockPattern = /```([\\s\\S]*?)```/g;\n let match;\n while ((match = codeBlockPattern.exec(text)) !== null) {\n matches.push(match[1].trim().replaceAll(\"json\", \"\").replaceAll(\"```\", \"\"));\n }\n\n // Pattern 3: JSON wrapped in backticks (`{...}`)\n const backtickPattern = /`([\\s\\S]*?)`/g;\n while ((match = backtickPattern.exec(text)) !== null) {\n const content = match[1].trim();\n if (content.startsWith('{') && content.endsWith('}')) {\n matches.push(content);\n }\n }\n\n // Pattern 4: Standalone JSON object (starts with { and ends with })\n const standalonePattern = /\\{[\\s\\S]*?\\}$/gm;\n while ((match = standalonePattern.exec(text)) !== null) {\n const content = match[0].trim();\n // Skip if it's already captured by other patterns\n if (!matches.some(existing => existing.includes(content) || content.includes(existing))) {\n matches.push(content);\n }\n }\n\n return matches;\n}\n\n/**\n * Validates if an object matches the expected signature\n * @param obj - The parsed JSON object\n * @param signature - The expected structure\n * @returns True if the object matches the signature\n */\n\n/**\n * Enhanced version that also looks for partial JSON (useful for streaming)\n * @param text - The text to check\n * @returns Object with success status, parsed data, and whether it's complete\n */\nexport function detectPartialJson<T = ArtifactJson>(\n text: string\n): { success: boolean; data?: T; isComplete: boolean; error?: string } {\n const result = detectAndParseJson<T>(text);\n\n if (result.success) {\n return { ...result, isComplete: true };\n }\n\n // Check if we have a partial JSON (starts with { but doesn't end properly)\n const partialMatches = text.match(/\\{[\\s\\S]*$/);\n if (partialMatches && partialMatches[0].includes('\"description\"') && partialMatches[0].includes('\"html\"')) {\n return {\n success: false,\n isComplete: false,\n error: 'Partial JSON detected - waiting for complete document'\n };\n }\n\n return { success: false, isComplete: false, error: result.error };\n}\n\n\n\n/**\n * Strips all JSON documents from a string, leaving only non-JSON content\n * @param text - The text to process\n * @returns The text with all JSON documents removed\n */\nexport function stripJsonDocuments(text: string): { beforeText: string, afterText: string } {\n if (!text || typeof text !== 'string') {\n return { beforeText: text, afterText: \"\" };\n }\n\n let result = text;\n const placeholder = \"[placeholder]\";\n\n // Remove JSON wrapped in code blocks (```json```)\n result = result.replace(/```json\\s*[\\s\\S]*?```/g, placeholder);\n\n // Remove JSON wrapped in backticks (`{...}`)\n result = result.replace(/`\\{[\\s\\S]*?\\}`/g, placeholder);\n\n // Remove standalone JSON objects (starts with { and ends with })\n result = result.replace(/\\{[\\s\\S]*?\\}/g, placeholder);\n\n // Clean up extra whitespace and newlines\n result = result.replace(/\\n\\s*\\n/g, '\\n').trim();\n\n const textBeforePlaceHolder = result.substring(0, result.indexOf(placeholder));\n const textAfterPlaceHolder = result.substring(result.lastIndexOf(placeholder) + placeholder.length);\n\n return { beforeText: textBeforePlaceHolder, afterText: textAfterPlaceHolder };\n} ","import { type ArtifactData } from '../models/ArtifactData';\nimport { ArtifactType } from '../models/enums';\nimport { normalizeFilename } from './fileUtils';\nimport { prettiffyFileName } from './interactionIdChecker';\nimport { decodeBase64, type ArtifactJson } from './jsonDetector';\n\n\nexport function parseArtifactFromJson(json: ArtifactJson, interactionId: string): ArtifactData | null {\n let convertedHtml: string;\n let ret: ArtifactData | null = null;\n\n if (!json.file_name) {\n console.error('No file name found parsing artifact');\n return null;\n }\n\n const artifactId = normalizeFilename(json.file_name); //We trust the server to generate unique names\n if (json.mime_type == \"text/html\") {\n\n try {\n const data = json?.data;\n if (data) {\n convertedHtml = decodeBase64(data);\n }\n else {\n convertedHtml = \"\";\n }\n } catch (error) {\n console.error(\"error decoding media data\", error);\n return null;\n }\n\n const defaultSectionId = json.type === ArtifactType.Dashboard ? 'dashboards' : 'charts';\n\n if (!json.file_name) {\n console.warn('No file name found, generating random UUID');\n json.file_name = Date.now().toString();\n }\n\n if (!json.file_name) {\n console.error('No file name found, generating random UUID');\n json.file_name = Date.now().toString();\n }\n\n ret = {\n mime_type: json.mime_type,\n id: artifactId,\n description: json.description || prettiffyFileName(json.file_name) || \"\",\n original_file_name: json.file_name || '',\n identifierToReplace: artifactId,\n type: json.type as ArtifactType,\n html: convertedHtml,\n interactionId: interactionId,\n created: new Date().toISOString(),\n sectionId: defaultSectionId,\n reasoning: json.reasoning?.trim() || '',\n loadingPromise: null\n };\n ret.sectionId = defaultSectionId;\n ret.reasoning = json.reasoning?.trim() || '';\n\n return ret;\n }\n else {\n if (!json.file_name) {\n console.error('No file name found, generating random UUID');\n json.file_name = Date.now().toString();\n }\n\n if (json.mime_type) {\n ret = {\n mime_type: json.mime_type,\n id: artifactId,\n description: json.description || prettiffyFileName(json.file_name) || \"\",\n reasoning: json.reasoning?.trim() || '',\n original_file_name: json.file_name,\n identifierToReplace: json.file_name,\n type: ArtifactType.Code,\n interactionId: interactionId,\n sectionId: 'charts',\n created: new Date().toISOString(),\n loadingPromise: null\n };\n ret.sectionId = 'charts';\n ret.inline_data = { mime_type: json.mime_type ?? 'text/txt', data: json.data ?? \"\" };\n }\n else\n console.error(\"mime_type is required for artifacts generated\");\n }\n\n\n return ret;\n}","/**\n * URI encoding detection and utility functions\n */\n\n/**\n * Checks if a string is likely URI encoded\n * @param str - The string to check\n * @returns True if the string appears to be URI encoded\n */\nexport function isUriEncoded(str: string): boolean {\n if (!str || typeof str !== 'string') {\n return false;\n }\n\n // Empty strings are not URI encoded\n if (str.length === 0) {\n return false;\n }\n\n // Check for percent-encoded characters (%XX pattern)\n const percentEncodedPattern = /%[0-9A-Fa-f]{2}/g;\n const percentMatches = str.match(percentEncodedPattern);\n\n if (percentMatches && percentMatches.length > 0) {\n return true;\n }\n\n // Check for other common URI encoding patterns\n const uriEncodedPatterns = [\n /\\+/g, // Plus signs (encoded spaces)\n /%20/g, // Encoded spaces\n /%2F/g, // Encoded forward slashes\n /%3F/g, // Encoded question marks\n /%3D/g, // Encoded equals signs\n /%26/g, // Encoded ampersands\n /%23/g, // Encoded hash symbols\n /%25/g, // Encoded percent signs\n /%2B/g, // Encoded plus signs\n /%3A/g, // Encoded colons\n /%40/g, // Encoded @ symbols\n /%5B/g, // Encoded opening brackets\n /%5D/g, // Encoded closing brackets\n ];\n\n for (const pattern of uriEncodedPatterns) {\n if (pattern.test(str)) {\n return true;\n }\n }\n\n // Check if the string contains characters that would typically be encoded\n const charactersThatShouldBeEncoded = /[^\\w\\-._~:/?#[\\]@!$&'()*+,;=%]/g;\n const hasUnencodedSpecialChars = charactersThatShouldBeEncoded.test(str);\n\n // If it has special characters that should be encoded but aren't percent-encoded,\n // it's probably not URI encoded\n if (hasUnencodedSpecialChars && !percentMatches) {\n return false;\n }\n\n return false;\n}\n\n/**\n * Decodes a URI encoded string\n * @param encodedString - The URI encoded string\n * @returns The decoded string\n */\nexport function decodeUri(encodedString: string): string {\n try {\n return decodeURIComponent(encodedString);\n } catch (error) {\n console.warn('Failed to decode URI:', error);\n return encodedString; // Return original if decoding fails\n }\n}\n\n/**\n * Encodes a string for URI usage\n * @param string - The string to encode\n * @returns The URI encoded string\n */\nexport function encodeUri(string: string): string {\n try {\n return encodeURIComponent(string);\n } catch (error) {\n console.warn('Failed to encode URI:', error);\n return string; // Return original if encoding fails\n }\n}\n\n/**\n * Checks if a string is a valid URI\n * @param uri - The URI string to validate\n * @returns True if the string is a valid URI\n */\nexport function isValidUri(uri: string): boolean {\n try {\n new URL(uri);\n return true;\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Extracts and decodes URI parameters from a query string\n * @param queryString - The query string (with or without leading ?)\n * @returns Object with decoded parameters\n */\nexport function parseUriParams(queryString: string): Record<string, string> {\n const params: Record<string, string> = {};\n\n // Remove leading ? if present\n const cleanQuery = queryString.startsWith('?') ? queryString.slice(1) : queryString;\n\n if (!cleanQuery) {\n return params;\n }\n\n const pairs = cleanQuery.split('&');\n\n for (const pair of pairs) {\n const [key, value] = pair.split('=');\n if (key) {\n params[decodeUri(key)] = value ? decodeUri(value) : '';\n }\n }\n\n return params;\n}\n\n/**\n * Checks if a string contains JavaScript code\n * @param str - The string to check\n * @returns True if the string appears to contain JavaScript code\n */\nexport function containsJavaScriptCode(str: string): boolean {\n if (!str || typeof str !== 'string') {\n return false;\n }\n\n // Normalize the string for better detection\n const normalizedStr = str.trim();\n\n if (normalizedStr.length === 0) {\n return false;\n }\n\n // JavaScript keywords and patterns\n const jsKeywords = [\n 'function', 'var', 'let', 'const', 'if', 'else', 'for', 'while', 'do', 'switch',\n 'case', 'break', 'continue', 'return', 'throw', 'try', 'catch', 'finally',\n 'class', 'extends', 'super', 'new', 'this', 'typeof', 'instanceof', 'delete',\n 'in', 'of', 'async', 'await', 'yield', 'import', 'export', 'default',\n 'null', 'undefined', 'true', 'false', 'Infinity', 'NaN'\n ];\n\n // Check for JavaScript keywords (case insensitive)\n const lowerStr = normalizedStr.toLowerCase();\n const keywordMatches = jsKeywords.filter(keyword =>\n lowerStr.includes(keyword.toLowerCase())\n );\n // JavaScript syntax patterns\n const jsPatterns = [\n // Function declarations and expressions\n /function\\s+\\w+\\s*\\(/g,\n /function\\s*\\(/g,\n /=>\\s*{/g,\n /=>\\s*\\w+/g,\n\n // Variable declarations\n /(?:var|let|const)\\s+\\w+\\s*=/g,\n\n // Object and array literals\n /{\\s*[\\w\"']\\s*:/g,\n /\\[\\s*[^\\]]*\\s*\\]/g,\n\n // Template literals\n /`[^`]*\\${[^}]*}[^`]*`/g,\n\n // Regular expressions\n /\\/[^\\/\\n]+\\/[gimuy]*/g,\n\n // Method calls with dot notation\n /\\w+\\.\\w+\\s*\\(/g,\n\n // Arrow functions\n /\\([^)]*\\)\\s*=>/g,\n\n // Destructuring\n /{\\s*[^}]*}\\s*=/g,\n /\\[\\s*[^\\]]*\\]\\s*=/g,\n\n // Spread operator\n /\\.\\.\\.\\w+/g,\n\n // Optional chaining\n /\\?\\./g,\n\n // Nullish coalescing\n /\\?\\?/g,\n\n // Logical operators\n /&&|\\|\\||!/g,\n\n // Comparison operators\n /===?|!==?|<=?|>=?/g,\n\n // Assignment operators\n /[+\\-*/%]=|=/g,\n\n // Increment/decrement\n /\\+\\+|--/g,\n\n // Comments\n /\\/\\/.*$/gm,\n /\\/\\*[\\s\\S]*?\\*\\//g,\n\n // String literals\n /\"[^\"]*\"|'[^']*'/g,\n\n // Numbers with decimal points or scientific notation\n /\\b\\d+\\.\\d+\\b/g,\n /\\b\\d+e[+-]?\\d+\\b/gi,\n\n // Hex numbers\n /\\b0x[0-9a-fA-F]+\\b/g,\n\n // Binary numbers\n /\\b0b[01]+\\b/g,\n\n // Octal numbers\n /\\b0o[0-7]+\\b/g\n ];\n\n let patternMatches = 0;\n for (const pattern of jsPatterns) {\n const matches = normalizedStr.match(pattern);\n if (matches) {\n patternMatches += matches.length;\n }\n }\n\n // Check for common JavaScript library patterns\n const jsLibraryPatterns = [\n /document\\./g,\n /window\\./g,\n /console\\./g,\n /localStorage\\./g,\n /sessionStorage\\./g,\n /JSON\\./g,\n /Math\\./g,\n /Date\\./g,\n /Array\\./g,\n /Object\\./g,\n /Promise\\./g,\n /fetch\\s*\\(/g,\n /setTimeout\\s*\\(/g,\n /setInterval\\s*\\(/g,\n /addEventListener\\s*\\(/g,\n /querySelector\\s*\\(/g,\n /getElementById\\s*\\(/g\n ];\n\n let libraryMatches = 0;\n for (const pattern of jsLibraryPatterns) {\n const matches = normalizedStr.match(pattern);\n if (matches) {\n libraryMatches += matches.length;\n }\n }\n\n // Check for balanced braces and parentheses (indicates code structure)\n const openBraces = (normalizedStr.match(/{/g) || []).length;\n const closeBraces = (normalizedStr.match(/}/g) || []).length;\n const openParens = (normalizedStr.match(/\\(/g) || []).length;\n const closeParens = (normalizedStr.match(/\\)/g) || []).length;\n const openBrackets = (normalizedStr.match(/\\[/g) || []).length;\n const closeBrackets = (normalizedStr.match(/\\]/g) || []).length;\n\n const hasBalancedStructure = (\n Math.abs(openBraces - closeBraces) <= 1 &&\n Math.abs(openParens - closeParens) <= 1 &&\n Math.abs(openBrackets - closeBrackets) <= 1\n );\n\n // Scoring system\n let score = 0;\n\n // Keywords contribute significantly\n score += keywordMatches.length * 1;\n\n // Syntax patterns contribute moderately\n score += patternMatches * 2;\n\n // Library patterns contribute moderately\n score += libraryMatches * 2;\n\n // Balanced structure contributes\n if (hasBalancedStructure && (openBraces > 0 || openParens > 0)) {\n score += 5;\n }\n\n // Check for semicolons (common in JS)\n const semicolons = (normalizedStr.match(/;/g) || []).length;\n score += semicolons * 1;\n\n // Check for common JS file extensions or script tags\n if (normalizedStr.includes('.js') || normalizedStr.includes('<script')) {\n score += 10;\n }\n\n // Threshold for considering it JavaScript code\n // Adjust this threshold based on your needs\n const threshold = 8;\n\n return score >= threshold;\n}","import type { IEbiContextData } from '../models/IAbiContext';\nimport type { AgentContext, User } from '../models/contexts';\n\nexport const setEbiContextData = (window: any, user: User, context: AgentContext | null = null, sessionId: string | null = null) => {\n const ebiContextData = window.customElements.get('ebi-context-data') as unknown as IEbiContextData;\n if (ebiContextData) {\n ebiContextData.user = user;\n ebiContextData.context = context || null;\n ebiContextData.sessionId = sessionId\n }\n}\n\nexport const setEbiContextSessionId = (sessionId: string) => {\n const ebiContextData = window.customElements.get('ebi-context-data') as unknown as IEbiContextData;\n if (ebiContextData) {\n ebiContextData.sessionId = sessionId\n }\n}","/**\n * Material Icons List\n * \n * This file contains a curated list of 200 Material Icons for use with\n * the Material Icons font: <i className=\"material-icons\">icon_name</i>\n * \n * Each icon has:\n * - iconName: lowercase snake_case name for use in the material-icons class\n * - friendlyName: Human-readable display name\n */\n\nexport interface MaterialIcon {\n iconName: string;\n friendlyName: string;\n}\n\n/**\n * Converts PascalCase to snake_case lowercase\n * Example: AccessAlarm -> access_alarm\n */\nfunction pascalToSnakeCase(str: string): string {\n return str\n .replace(/([A-Z])/g, '_$1')\n .toLowerCase()\n .replace(/^_/, '');\n}\n\n/**\n * Converts PascalCase to friendly name with spaces\n * Example: AccessAlarm -> Access Alarm\n */\nfunction pascalToFriendlyName(str: string): string {\n return str\n .replace(/([A-Z])/g, ' $1')\n .trim();\n}\n\n// Raw icon names in PascalCase (MUI format)\nconst rawIconNames = [\n // === ACTION ICONS ===\n 'Add',\n 'Remove',\n 'Delete',\n 'Edit',\n 'Save',\n 'Cancel',\n 'Check',\n 'Close',\n 'Done',\n 'Clear',\n 'Search',\n 'Refresh',\n 'Undo',\n 'Redo',\n 'Print',\n 'Download',\n 'Upload',\n 'Share',\n 'Copy',\n 'ContentCopy',\n 'ContentPaste',\n 'ContentCut',\n 'SelectAll',\n 'Sync',\n 'Settings',\n 'MoreVert',\n 'MoreHoriz',\n 'FilterList',\n 'Sort',\n 'ZoomIn',\n 'ZoomOut',\n 'Fullscreen',\n 'FullscreenExit',\n 'OpenInNew',\n 'Launch',\n 'Send',\n 'Reply',\n 'Forward',\n 'Archive',\n 'Unarchive',\n\n // === NAVIGATION ICONS ===\n 'Home',\n 'Menu',\n 'ArrowBack',\n 'ArrowForward',\n 'ArrowUpward',\n 'ArrowDownward',\n 'ChevronLeft',\n 'ChevronRight',\n 'ExpandMore',\n 'ExpandLess',\n 'FirstPage',\n 'LastPage',\n 'NavigateBefore',\n 'NavigateNext',\n 'Apps',\n 'Dashboard',\n 'Inbox',\n 'Explore',\n 'History',\n 'Bookmark',\n 'BookmarkBorder',\n\n // === COMMUNICATION ICONS ===\n 'Email',\n 'Phone',\n 'Message',\n 'Chat',\n 'Forum',\n 'Comment',\n 'Notifications',\n 'NotificationsActive',\n 'NotificationsOff',\n 'Call',\n 'CallEnd',\n 'Contacts',\n 'ContactMail',\n 'ContactPhone',\n 'Person',\n 'PersonAdd',\n 'PersonRemove',\n 'People',\n 'Group',\n 'Groups',\n\n // === CONTENT ICONS ===\n 'Folder',\n 'FolderOpen',\n 'CreateNewFolder',\n 'Description',\n 'InsertDriveFile',\n 'AttachFile',\n 'Link',\n 'LinkOff',\n 'Image',\n 'Photo',\n 'PhotoLibrary',\n 'VideoLibrary',\n 'Movie',\n 'MusicNote',\n 'Audiotrack',\n 'Article',\n 'Feed',\n 'List',\n 'ViewList',\n 'GridView',\n 'TableChart',\n 'BarChart',\n 'PieChart',\n 'ShowChart',\n 'Timeline',\n 'Assessment',\n 'Analytics',\n\n // === STATUS & INFO ICONS ===\n 'Info',\n 'Warning',\n 'Error',\n 'Help',\n 'HelpOutline',\n 'CheckCircle',\n 'Cancel',\n 'Block',\n 'Report',\n 'ReportProblem',\n 'Verified',\n 'VerifiedUser',\n 'Security',\n 'Lock',\n 'LockOpen',\n 'Visibility',\n 'VisibilityOff',\n 'Public',\n 'PrivacyTip',\n\n // === DEVICE & HARDWARE ICONS ===\n 'Computer',\n 'DesktopWindows',\n 'Laptop',\n 'Smartphone',\n 'Tablet',\n 'Watch',\n 'Tv',\n 'Router',\n 'Wifi',\n 'WifiOff',\n 'Bluetooth',\n 'BluetoothDisabled',\n 'Battery',\n 'BatteryFull',\n 'BatteryAlert',\n 'SignalCellularAlt',\n 'Storage',\n 'Memory',\n 'Usb',\n 'Keyboard',\n 'Mouse',\n 'Print',\n 'Scanner',\n 'Camera',\n 'Mic',\n 'MicOff',\n 'Videocam',\n 'VideocamOff',\n 'Speaker',\n 'VolumeUp',\n 'VolumeDown',\n 'VolumeMute',\n 'VolumeOff',\n\n // === TIME & DATE ICONS ===\n 'Schedule',\n 'AccessTime',\n 'Timer',\n 'Timelapse',\n 'Today',\n 'Event',\n 'EventAvailable',\n 'EventBusy',\n 'CalendarToday',\n 'CalendarMonth',\n 'DateRange',\n 'Alarm',\n 'AlarmOn',\n 'AlarmOff',\n\n // === LOCATION & MAP ICONS ===\n 'Place',\n 'LocationOn',\n 'LocationOff',\n 'MyLocation',\n 'GpsFixed',\n 'Map',\n 'Directions',\n 'DirectionsCar',\n 'DirectionsBus',\n 'DirectionsWalk',\n 'Flight',\n 'LocalShipping',\n 'Store',\n 'Business',\n\n // === SOCIAL & RATING ICONS ===\n 'ThumbUp',\n 'ThumbDown',\n 'Favorite',\n 'FavoriteBorder',\n 'Star',\n 'StarBorder',\n 'StarHalf',\n 'Grade',\n 'Flag',\n 'EmojiEmotions',\n 'SentimentSatisfied',\n 'SentimentDissatisfied',\n\n // === EDITOR & FORMAT ICONS ===\n 'FormatBold',\n 'FormatItalic',\n 'FormatUnderlined',\n 'FormatAlignLeft',\n 'FormatAlignCenter',\n 'FormatAlignRight',\n 'FormatAlignJustify',\n 'FormatListBulleted',\n 'FormatListNumbered',\n 'FormatIndentIncrease',\n 'FormatIndentDecrease',\n 'FormatQuote',\n 'Title',\n 'TextFields',\n 'Code',\n 'Functions',\n 'Highlight',\n 'ColorLens',\n 'Palette',\n 'Brush',\n 'Create',\n];\n\n/**\n * Curated list of 200 Material Icons\n */\nexport const materialIcons: MaterialIcon[] = rawIconNames.map(name => ({\n iconName: pascalToSnakeCase(name),\n friendlyName: pascalToFriendlyName(name),\n}));\n\n/**\n * Get an icon by its snake_case name\n */\nexport function getIconByName(iconName: string): MaterialIcon | undefined {\n return materialIcons.find(icon => icon.iconName === iconName);\n}\n\n/**\n * Search icons by friendly name (case-insensitive partial match)\n */\nexport function searchIcons(query: string): MaterialIcon[] {\n const lowerQuery = query.toLowerCase();\n return materialIcons.filter(icon =>\n icon.friendlyName.toLowerCase().includes(lowerQuery) ||\n icon.iconName.includes(lowerQuery)\n );\n}\n\n/**\n * Icons grouped by category for easier browsing\n */\nexport const iconCategories = {\n action: materialIcons.slice(0, 40),\n navigation: materialIcons.slice(40, 61),\n communication: materialIcons.slice(61, 81),\n content: materialIcons.slice(81, 107),\n status: materialIcons.slice(107, 126),\n device: materialIcons.slice(126, 159),\n time: materialIcons.slice(159, 173),\n location: materialIcons.slice(173, 187),\n social: materialIcons.slice(187, 199),\n editor: materialIcons.slice(199),\n};\n\nexport default materialIcons;\n","// Google OAuth Configuration\n// Replace this with your actual Google OAuth client ID\n// You can get this from the Google Cloud Console: https://console.cloud.google.com/\n\nimport { getEnvVar } from '../utils/envUtils.js';\n\nexport const GOOGLE_CLIENT_ID = getEnvVar('VITE_GOOGLE_CLIENT_ID');\n\n// Optional: Configure allowed domains for authentication\nexport const ALLOWED_DOMAINS = [\n \"envisiontecnologia.com.br\"\n];\n\nexport const ALLOWED_EMAILS = getEnvVar('ALLOWED_EMAILS')?.split(',') ?? [];\n\n// Optional: Configure authentication requirements\nexport const AUTH_CONFIG = {\n requireAuthentication: true,\n allowAnonymousAccess: false,\n sessionTimeout: 24 * 60 * 60 * 1000, // 24 hours in milliseconds\n GOOGLE_API_KEY: getEnvVar('GOOGLE_API_KEY')\n}; "],"names":["base_production_url","base_url_local","getAgentBaseUrl","__name","window","agentBaseUrlOverride","GCS_BUCKET_IMAGE_PATH","getArtifactsBaseUrl","runningOnCaddy","__vite_import_meta_env__","getDotNetBaseUrl","localHostUrl","location","dateReviver","_key","value","normalizeFilename","text","normalized","_hasBuffer","_TD","_TE","b64ch","b64chs","b64tab","a","tab","c","i","b64re","_fromCC","_U8Afrom","it","_mkUriSafe","src","m0","_tidyB64","s","btoaPolyfill","bin","u32","c0","c1","c2","asc","pad","_btoa","_fromUint8Array","u8a","strs","l","cb_utob","cc","re_utob","utob","u","_encode","encode","urlsafe","re_btou","cb_btou","cccc","cp","offset","btou","b","atobPolyfill","u24","r1","r2","binArray","_atob","_toUint8Array","_decode","_unURI","decode","isValid","decodeBase64","base64","encodeBase64","decodeUriFromPython","uriEncoded","error","isBase64Encoded","parseArtifactFromJson","json","interactionId","convertedHtml","ret","artifactId","data","defaultSectionId","ArtifactType","prettiffyFileName","_a","_b","_c","isUriEncoded","str","percentEncodedPattern","percentMatches","uriEncodedPatterns","pattern","decodeUri","encodedString","encodeUri","string","isValidUri","uri","parseUriParams","queryString","params","cleanQuery","pairs","pair","key","setEbiContextData","user","context","sessionId","ebiContextData","setEbiContextSessionId","pascalToSnakeCase","pascalToFriendlyName","rawIconNames","materialIcons","name","getIconByName","iconName","icon","searchIcons","query","lowerQuery","iconCategories","GOOGLE_CLIENT_ID","getEnvVar","ALLOWED_DOMAINS","ALLOWED_EMAILS","AUTH_CONFIG"],"mappings":"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A;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKaC,IAAgCD,GAAa,IAAI,CAAAE,OAAS;AAAA,EACrE,UAAUJ,GAAkBI,CAAI;AAAA,EAChC,cAAcH,GAAqBG,CAAI;AACzC,EAAE;AAKK,SAASC,GAAcC,GAA4C;AACxE,SAAOH,EAAc,KAAK,CAAAI,MAAQA,EAAK,aAAaD,CAAQ;AAC9D;AAFgB7H,EAAA4H,IAAA;AAOT,SAASG,GAAYC,GAA+B;AACzD,QAAMC,IAAaD,EAAM,YAAA;AACzB,SAAON,EAAc;AAAA,IAAO,CAAAI,MAC1BA,EAAK,aAAa,YAAA,EAAc,SAASG,CAAU,KACnDH,EAAK,SAAS,SAASG,CAAU;AAAA,EAAA;AAErC;AANgBjI,EAAA+H,IAAA;AAWT,MAAMG,KAAiB;AAAA,EAC5B,QAAQR,EAAc,MAAM,GAAG,EAAE;AAAA,EACjC,YAAYA,EAAc,MAAM,IAAI,EAAE;AAAA,EACtC,eAAeA,EAAc,MAAM,IAAI,EAAE;AAAA,EACzC,SAASA,EAAc,MAAM,IAAI,GAAG;AAAA,EACpC,QAAQA,EAAc,MAAM,KAAK,GAAG;AAAA,EACpC,QAAQA,EAAc,MAAM,KAAK,GAAG;AAAA,EACpC,MAAMA,EAAc,MAAM,KAAK,GAAG;AAAA,EAClC,UAAUA,EAAc,MAAM,KAAK,GAAG;AAAA,EACtC,QAAQA,EAAc,MAAM,KAAK,GAAG;AAAA,EACpC,QAAQA,EAAc,MAAM,GAAG;AACjC,GC3TaS,KAAmBC,EAAU,uBAAuB,GAGpDC,KAAkB;AAAA,EAC3B;AACJ;;AAEO,MAAMC,OAAiB3C,IAAAyC,EAAU,gBAAgB,MAA1B,gBAAAzC,EAA6B,MAAM,SAAQ,CAAA,GAG5D4C,KAAc;AAAA,EACvB,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,gBAAgB,OAAU,KAAK;AAAA;AAAA,EAC/B,gBAAgBH,EAAU,gBAAgB;AAC9C;","x_google_ignoreList":[5]}
|
|
1
|
+
{"version":3,"file":"auth-DbmLacBc.js","sources":["../src/utils/getAgentBaseUrl.ts","../src/utils/getAgentArtifactsBaseUrl.ts","../src/utils/getDotNetBaseUrl.ts","../src/utils/objectUtils.ts","../src/utils/fileUtils.ts","../node_modules/js-base64/base64.mjs","../src/utils/jsonDetector.ts","../src/utils/parseArtifact.ts","../src/utils/uriUtils.ts","../src/utils/sessionWindowParameters.ts","../src/utils/materialIconsList.ts","../src/utils/auth.ts"],"sourcesContent":["import { agentBaseUrlOverride } from './envOverrides';\n\nconst base_production_url = \"https://agent.tripapi.com.br\";\nconst base_url_local = \"http://localagent:8000\";\n\nexport const getAgentBaseUrl = (window: any): string => {\n const urlParams = new URLSearchParams(window.location.search);\n const isLocal = urlParams.get('local') === 'true';\n\n return isLocal ? base_url_local : (agentBaseUrlOverride() ?? base_production_url);\n}","//const GCS_BUCKET_IMAGE_PATH = \"https://storage.googleapis.com/ebi_artifacts_public\"\nconst GCS_BUCKET_IMAGE_PATH = \"https://storage.googleapis.com/aibi_artifacts_bucket\"\n\n\nexport const getArtifactsBaseUrl = (): string => {\n return GCS_BUCKET_IMAGE_PATH;\n}","import { agentBaseUrlOverride } from './envOverrides';\n\nconst runningOnCaddy = ((import.meta as any).env?.VITE_CADDY as string) == \"true\";\n\n\n/**\n * Gets the base URL for the .NET backend API\n * Used for Agent and Plugin services that communicate directly with the .NET server\n */\nexport function getDotNetBaseUrl(): string {\n const localHostUrl = runningOnCaddy ? \"http://wsserver.localhost\" : \"http://localhost:8000\"\n\n\n // Check if we're in a browser environment\n if (typeof window !== 'undefined' && window?.location) {\n const location = window.location.host.toLowerCase();\n\n // When loaded from inside a Docker container (e.g. Puppeteer in ai-worker)\n // the page is served from host.docker.internal. The .NET API is also on the\n // host machine, so we must route through host.docker.internal as well.\n if (location.indexOf('docker.internal') > -1) {\n return 'http://host.docker.internal:8000';\n }\n\n if (location.indexOf('localhost') > -1) {\n\n return localHostUrl;\n }\n\n // Production - the deploy-time override (e.g. staging) or the prod default\n return agentBaseUrlOverride() ?? 'https://agent.tripapi.com.br';\n }\n\n // Server-side rendering or Node.js environment\n if (typeof process !== 'undefined' && process.env) {\n\n return process.env.AGENT_BASE_URL || process.env.DOTNET_API_URL || localHostUrl;\n }\n\n return localHostUrl;\n}\n","export function dateReviver(_key: any, value: any) {\n // A regex to test for the ISO 8601 date format.\n // This is a robust way to identify date strings for parsing.\n const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z$/;\n\n // If the value is a string that matches the ISO format,\n // convert it back to a Date object.\n if (typeof value === 'string' && isoDateRegex.test(value)) {\n return new Date(value);\n }\n\n // Otherwise, return the original value unchanged.\n return value;\n}\n\n/**\n * Utility functions for object operations\n */\n\n/**\n * Returns the first property name that has a non-null value\n * @param obj - The object to search through\n * @returns The property name or null if all properties are null\n */\nexport function findFirstNonNullProperty<T extends Record<string, any>>(obj: T): keyof T | null {\n if (!obj)\n return null;\n\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null && value !== undefined) {\n return key as keyof T;\n }\n }\n return null;\n}\n\n/**\n * Returns the first property name and value that is not null\n * @param obj - The object to search through\n * @returns Object with property name and value, or null if all properties are null\n */\nexport function findFirstNonNullPropertyWithValue<T extends Record<string, any>>(obj: T): { key: keyof T; value: any } | null {\n if (!obj)\n return null;\n\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null && value !== undefined) {\n return { key: key as keyof T, value };\n }\n }\n return null;\n}\n\n/**\n * Returns all property names that have non-null values\n * @param obj - The object to search through\n * @returns Array of property names with non-null values\n */\nexport function findAllNonNullNonEmptyProperties<T extends Record<string, any>>(obj: T): (keyof T)[] {\n if (!obj)\n return [];\n\n return Object.entries(obj)\n .filter(([_, value]) => value !== null && value !== undefined && value !== \"\")\n .map(([key]) => key as keyof T);\n}\n\n/**\n * Returns an object with only the non-null properties\n * @param obj - The object to filter\n * @returns New object with only non-null properties\n */\nexport function filterNonNullProperties<T extends Record<string, any>>(obj: T): Partial<T> {\n const result: Partial<T> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null && value !== undefined) {\n result[key as keyof T] = value;\n }\n }\n return result;\n} ","/**\n * Normalizes a filename by removing special characters\n * @param text - The input text to normalize\n * @returns The normalized text\n */\nexport function normalizeFilename(text: string): string {\n // Normalize Unicode characters (NFD decomposition)\n // This separates base characters from their accents\n let normalized = text.normalize(\"NFD\");\n\n // Remove all characters except alphanumeric, spaces, hyphens, and underscores\n normalized = normalized.replace(/[^a-zA-Z0-9\\s\\-_.]/g, \"\");\n\n return normalized;\n}","/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.8';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, r1, r2;\n let binArray = []; // use array to avoid minor gc in loop\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n if (r1 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255));\n }\n else if (r2 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255));\n }\n else {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255));\n }\n }\n return binArray.join('');\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n","import { decode, encode, isValid } from 'js-base64';\nimport type { ArtifactType } from '../models/enums';\n\nexport interface ArtifactJson {\n description?: string;\n reasoning?: string;\n type?: ArtifactType;\n file_name?: string;\n mime_type?: string;\n data?: string;\n}\n\n\n// function b64_to_utf8(str: string) {\n// str = str.replace(/\\s/g, '');\n// return decodeURIComponent(escape(window.atob(str)));\n// }\n\n// // Decode Base64 data to Array\n// function base64ToArray(base64: any) {\n// const binaryString = b64_to_utf8(base64);\n// const len = binaryString.length;\n// const bytes = new Uint8Array(len);\n// for (let i = 0; i < len; i++) {\n// bytes[i] = binaryString.charCodeAt(i);\n// }\n// return bytes.buffer;\n// }\n\n// function arrayToString(uint8Array: any) {\n// const decoder = new TextDecoder('utf-8');\n// const decodedString = decoder.decode(uint8Array);\n\n// return decodedString\n// }\n\n// function isBase64(base64: string): boolean {\n// return /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/.test(base64);\n// }\n\nexport function decodeBase64(base64: string): string {\n return decode(decodeURIComponent(base64));\n}\n\nexport function encodeBase64(base64: string): string {\n return encodeURIComponent(encode(base64));\n}\n\n\nexport function decodeUriFromPython(uriEncoded: string): string {\n try {\n return decodeURIComponent(uriEncoded);\n } catch (error) {\n console.warn('Failed to decode uri:', error);\n return uriEncoded; // Return original if decoding fails\n }\n}\n\nexport function isBase64Encoded(base64: string): boolean {\n return isValid(decodeURIComponent(base64));\n}\n\n\n/**\n * Checks if a string contains a valid JSON document with the specified signature\n * @param text - The text to check for JSON content\n * @param signature - The expected JSON structure (optional, defaults to ArtifactSignature)\n * @returns Object with success status and parsed data if found\n */\nexport function detectAndParseJson<T = ArtifactJson>(\n text: string\n): { success: boolean; data?: T; error?: string } {\n if (!text || typeof text !== 'string') {\n return { success: false, error: 'Invalid input: text must be a non-empty string' };\n }\n\n try {\n // Look for JSON patterns in the text\n const jsonMatches = findJsonInText(text);\n\n\n\n for (const match of jsonMatches) {\n try {\n const matchTextCleaned = match.replaceAll(/(?<!\\\\)\\n/g, ' '); //Only the unscaped line breaks\n let parsed = null;\n\n try {\n parsed = JSON.parse(matchTextCleaned);\n }\n catch (parseError) {\n\n continue;\n }\n\n\n\n // If no specific signature provided, just validate it's an object\n if (typeof parsed === 'object' && parsed !== null && typeof parsed.media_data === 'string') {\n try {\n parsed.media_data = decodeBase64(parsed.media_data);\n } catch (error) {\n\n }\n\n parsed.media_data = parsed.media_data;\n\n\n return { success: true, data: parsed as T };\n }\n else\n continue;\n\n } catch (parseError) {\n\n }\n }\n\n return { success: false, error: 'No valid JSON found matching the signature' };\n } catch (error) {\n return { success: false, error: `Detection failed: ${error}` };\n }\n}\n\n/**\n * Finds all potential JSON strings within a text\n * @param text - The text to search\n * @returns Array of potential JSON strings\n */\nfunction findJsonInText(text: string): string[] {\n const matches: string[] = [];\n\n // Pattern 1: ```json {...}```\n const jsonPattern = /```json([\\s\\S]*?)```/g;\n let matchJson;\n while ((matchJson = jsonPattern.exec(text)) !== null) {\n matches.push(matchJson[1].trim().replaceAll(\"json\", \"\").replaceAll(\"```\", \"\"));\n }\n\n // Pattern 2: JSON wrapped in code blocks (```{...}```)\n const codeBlockPattern = /```([\\s\\S]*?)```/g;\n let match;\n while ((match = codeBlockPattern.exec(text)) !== null) {\n matches.push(match[1].trim().replaceAll(\"json\", \"\").replaceAll(\"```\", \"\"));\n }\n\n // Pattern 3: JSON wrapped in backticks (`{...}`)\n const backtickPattern = /`([\\s\\S]*?)`/g;\n while ((match = backtickPattern.exec(text)) !== null) {\n const content = match[1].trim();\n if (content.startsWith('{') && content.endsWith('}')) {\n matches.push(content);\n }\n }\n\n // Pattern 4: Standalone JSON object (starts with { and ends with })\n const standalonePattern = /\\{[\\s\\S]*?\\}$/gm;\n while ((match = standalonePattern.exec(text)) !== null) {\n const content = match[0].trim();\n // Skip if it's already captured by other patterns\n if (!matches.some(existing => existing.includes(content) || content.includes(existing))) {\n matches.push(content);\n }\n }\n\n return matches;\n}\n\n/**\n * Validates if an object matches the expected signature\n * @param obj - The parsed JSON object\n * @param signature - The expected structure\n * @returns True if the object matches the signature\n */\n\n/**\n * Enhanced version that also looks for partial JSON (useful for streaming)\n * @param text - The text to check\n * @returns Object with success status, parsed data, and whether it's complete\n */\nexport function detectPartialJson<T = ArtifactJson>(\n text: string\n): { success: boolean; data?: T; isComplete: boolean; error?: string } {\n const result = detectAndParseJson<T>(text);\n\n if (result.success) {\n return { ...result, isComplete: true };\n }\n\n // Check if we have a partial JSON (starts with { but doesn't end properly)\n const partialMatches = text.match(/\\{[\\s\\S]*$/);\n if (partialMatches && partialMatches[0].includes('\"description\"') && partialMatches[0].includes('\"html\"')) {\n return {\n success: false,\n isComplete: false,\n error: 'Partial JSON detected - waiting for complete document'\n };\n }\n\n return { success: false, isComplete: false, error: result.error };\n}\n\n\n\n/**\n * Strips all JSON documents from a string, leaving only non-JSON content\n * @param text - The text to process\n * @returns The text with all JSON documents removed\n */\nexport function stripJsonDocuments(text: string): { beforeText: string, afterText: string } {\n if (!text || typeof text !== 'string') {\n return { beforeText: text, afterText: \"\" };\n }\n\n let result = text;\n const placeholder = \"[placeholder]\";\n\n // Remove JSON wrapped in code blocks (```json```)\n result = result.replace(/```json\\s*[\\s\\S]*?```/g, placeholder);\n\n // Remove JSON wrapped in backticks (`{...}`)\n result = result.replace(/`\\{[\\s\\S]*?\\}`/g, placeholder);\n\n // Remove standalone JSON objects (starts with { and ends with })\n result = result.replace(/\\{[\\s\\S]*?\\}/g, placeholder);\n\n // Clean up extra whitespace and newlines\n result = result.replace(/\\n\\s*\\n/g, '\\n').trim();\n\n const textBeforePlaceHolder = result.substring(0, result.indexOf(placeholder));\n const textAfterPlaceHolder = result.substring(result.lastIndexOf(placeholder) + placeholder.length);\n\n return { beforeText: textBeforePlaceHolder, afterText: textAfterPlaceHolder };\n} ","import { type ArtifactData } from '../models/ArtifactData';\nimport { ArtifactType } from '../models/enums';\nimport { normalizeFilename } from './fileUtils';\nimport { prettiffyFileName } from './interactionIdChecker';\nimport { decodeBase64, type ArtifactJson } from './jsonDetector';\n\n\nexport function parseArtifactFromJson(json: ArtifactJson, interactionId: string): ArtifactData | null {\n let convertedHtml: string;\n let ret: ArtifactData | null = null;\n\n if (!json.file_name) {\n console.error('No file name found parsing artifact');\n return null;\n }\n\n const artifactId = normalizeFilename(json.file_name); //We trust the server to generate unique names\n if (json.mime_type == \"text/html\") {\n\n try {\n const data = json?.data;\n if (data) {\n convertedHtml = decodeBase64(data);\n }\n else {\n convertedHtml = \"\";\n }\n } catch (error) {\n console.error(\"error decoding media data\", error);\n return null;\n }\n\n const defaultSectionId = json.type === ArtifactType.Dashboard ? 'dashboards' : 'charts';\n\n if (!json.file_name) {\n console.warn('No file name found, generating random UUID');\n json.file_name = Date.now().toString();\n }\n\n if (!json.file_name) {\n console.error('No file name found, generating random UUID');\n json.file_name = Date.now().toString();\n }\n\n ret = {\n mime_type: json.mime_type,\n id: artifactId,\n description: json.description || prettiffyFileName(json.file_name) || \"\",\n original_file_name: json.file_name || '',\n identifierToReplace: artifactId,\n type: json.type as ArtifactType,\n html: convertedHtml,\n interactionId: interactionId,\n created: new Date().toISOString(),\n sectionId: defaultSectionId,\n reasoning: json.reasoning?.trim() || '',\n loadingPromise: null\n };\n ret.sectionId = defaultSectionId;\n ret.reasoning = json.reasoning?.trim() || '';\n\n return ret;\n }\n else {\n if (!json.file_name) {\n console.error('No file name found, generating random UUID');\n json.file_name = Date.now().toString();\n }\n\n if (json.mime_type) {\n ret = {\n mime_type: json.mime_type,\n id: artifactId,\n description: json.description || prettiffyFileName(json.file_name) || \"\",\n reasoning: json.reasoning?.trim() || '',\n original_file_name: json.file_name,\n identifierToReplace: json.file_name,\n type: ArtifactType.Code,\n interactionId: interactionId,\n sectionId: 'charts',\n created: new Date().toISOString(),\n loadingPromise: null\n };\n ret.sectionId = 'charts';\n ret.inline_data = { mime_type: json.mime_type ?? 'text/txt', data: json.data ?? \"\" };\n }\n else\n console.error(\"mime_type is required for artifacts generated\");\n }\n\n\n return ret;\n}","/**\n * URI encoding detection and utility functions\n */\n\n/**\n * Checks if a string is likely URI encoded\n * @param str - The string to check\n * @returns True if the string appears to be URI encoded\n */\nexport function isUriEncoded(str: string): boolean {\n if (!str || typeof str !== 'string') {\n return false;\n }\n\n // Empty strings are not URI encoded\n if (str.length === 0) {\n return false;\n }\n\n // Check for percent-encoded characters (%XX pattern)\n const percentEncodedPattern = /%[0-9A-Fa-f]{2}/g;\n const percentMatches = str.match(percentEncodedPattern);\n\n if (percentMatches && percentMatches.length > 0) {\n return true;\n }\n\n // Check for other common URI encoding patterns\n const uriEncodedPatterns = [\n /\\+/g, // Plus signs (encoded spaces)\n /%20/g, // Encoded spaces\n /%2F/g, // Encoded forward slashes\n /%3F/g, // Encoded question marks\n /%3D/g, // Encoded equals signs\n /%26/g, // Encoded ampersands\n /%23/g, // Encoded hash symbols\n /%25/g, // Encoded percent signs\n /%2B/g, // Encoded plus signs\n /%3A/g, // Encoded colons\n /%40/g, // Encoded @ symbols\n /%5B/g, // Encoded opening brackets\n /%5D/g, // Encoded closing brackets\n ];\n\n for (const pattern of uriEncodedPatterns) {\n if (pattern.test(str)) {\n return true;\n }\n }\n\n // Check if the string contains characters that would typically be encoded\n const charactersThatShouldBeEncoded = /[^\\w\\-._~:/?#[\\]@!$&'()*+,;=%]/g;\n const hasUnencodedSpecialChars = charactersThatShouldBeEncoded.test(str);\n\n // If it has special characters that should be encoded but aren't percent-encoded,\n // it's probably not URI encoded\n if (hasUnencodedSpecialChars && !percentMatches) {\n return false;\n }\n\n return false;\n}\n\n/**\n * Decodes a URI encoded string\n * @param encodedString - The URI encoded string\n * @returns The decoded string\n */\nexport function decodeUri(encodedString: string): string {\n try {\n return decodeURIComponent(encodedString);\n } catch (error) {\n console.warn('Failed to decode URI:', error);\n return encodedString; // Return original if decoding fails\n }\n}\n\n/**\n * Encodes a string for URI usage\n * @param string - The string to encode\n * @returns The URI encoded string\n */\nexport function encodeUri(string: string): string {\n try {\n return encodeURIComponent(string);\n } catch (error) {\n console.warn('Failed to encode URI:', error);\n return string; // Return original if encoding fails\n }\n}\n\n/**\n * Checks if a string is a valid URI\n * @param uri - The URI string to validate\n * @returns True if the string is a valid URI\n */\nexport function isValidUri(uri: string): boolean {\n try {\n new URL(uri);\n return true;\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Extracts and decodes URI parameters from a query string\n * @param queryString - The query string (with or without leading ?)\n * @returns Object with decoded parameters\n */\nexport function parseUriParams(queryString: string): Record<string, string> {\n const params: Record<string, string> = {};\n\n // Remove leading ? if present\n const cleanQuery = queryString.startsWith('?') ? queryString.slice(1) : queryString;\n\n if (!cleanQuery) {\n return params;\n }\n\n const pairs = cleanQuery.split('&');\n\n for (const pair of pairs) {\n const [key, value] = pair.split('=');\n if (key) {\n params[decodeUri(key)] = value ? decodeUri(value) : '';\n }\n }\n\n return params;\n}\n\n/**\n * Checks if a string contains JavaScript code\n * @param str - The string to check\n * @returns True if the string appears to contain JavaScript code\n */\nexport function containsJavaScriptCode(str: string): boolean {\n if (!str || typeof str !== 'string') {\n return false;\n }\n\n // Normalize the string for better detection\n const normalizedStr = str.trim();\n\n if (normalizedStr.length === 0) {\n return false;\n }\n\n // JavaScript keywords and patterns\n const jsKeywords = [\n 'function', 'var', 'let', 'const', 'if', 'else', 'for', 'while', 'do', 'switch',\n 'case', 'break', 'continue', 'return', 'throw', 'try', 'catch', 'finally',\n 'class', 'extends', 'super', 'new', 'this', 'typeof', 'instanceof', 'delete',\n 'in', 'of', 'async', 'await', 'yield', 'import', 'export', 'default',\n 'null', 'undefined', 'true', 'false', 'Infinity', 'NaN'\n ];\n\n // Check for JavaScript keywords (case insensitive)\n const lowerStr = normalizedStr.toLowerCase();\n const keywordMatches = jsKeywords.filter(keyword =>\n lowerStr.includes(keyword.toLowerCase())\n );\n // JavaScript syntax patterns\n const jsPatterns = [\n // Function declarations and expressions\n /function\\s+\\w+\\s*\\(/g,\n /function\\s*\\(/g,\n /=>\\s*{/g,\n /=>\\s*\\w+/g,\n\n // Variable declarations\n /(?:var|let|const)\\s+\\w+\\s*=/g,\n\n // Object and array literals\n /{\\s*[\\w\"']\\s*:/g,\n /\\[\\s*[^\\]]*\\s*\\]/g,\n\n // Template literals\n /`[^`]*\\${[^}]*}[^`]*`/g,\n\n // Regular expressions\n /\\/[^\\/\\n]+\\/[gimuy]*/g,\n\n // Method calls with dot notation\n /\\w+\\.\\w+\\s*\\(/g,\n\n // Arrow functions\n /\\([^)]*\\)\\s*=>/g,\n\n // Destructuring\n /{\\s*[^}]*}\\s*=/g,\n /\\[\\s*[^\\]]*\\]\\s*=/g,\n\n // Spread operator\n /\\.\\.\\.\\w+/g,\n\n // Optional chaining\n /\\?\\./g,\n\n // Nullish coalescing\n /\\?\\?/g,\n\n // Logical operators\n /&&|\\|\\||!/g,\n\n // Comparison operators\n /===?|!==?|<=?|>=?/g,\n\n // Assignment operators\n /[+\\-*/%]=|=/g,\n\n // Increment/decrement\n /\\+\\+|--/g,\n\n // Comments\n /\\/\\/.*$/gm,\n /\\/\\*[\\s\\S]*?\\*\\//g,\n\n // String literals\n /\"[^\"]*\"|'[^']*'/g,\n\n // Numbers with decimal points or scientific notation\n /\\b\\d+\\.\\d+\\b/g,\n /\\b\\d+e[+-]?\\d+\\b/gi,\n\n // Hex numbers\n /\\b0x[0-9a-fA-F]+\\b/g,\n\n // Binary numbers\n /\\b0b[01]+\\b/g,\n\n // Octal numbers\n /\\b0o[0-7]+\\b/g\n ];\n\n let patternMatches = 0;\n for (const pattern of jsPatterns) {\n const matches = normalizedStr.match(pattern);\n if (matches) {\n patternMatches += matches.length;\n }\n }\n\n // Check for common JavaScript library patterns\n const jsLibraryPatterns = [\n /document\\./g,\n /window\\./g,\n /console\\./g,\n /localStorage\\./g,\n /sessionStorage\\./g,\n /JSON\\./g,\n /Math\\./g,\n /Date\\./g,\n /Array\\./g,\n /Object\\./g,\n /Promise\\./g,\n /fetch\\s*\\(/g,\n /setTimeout\\s*\\(/g,\n /setInterval\\s*\\(/g,\n /addEventListener\\s*\\(/g,\n /querySelector\\s*\\(/g,\n /getElementById\\s*\\(/g\n ];\n\n let libraryMatches = 0;\n for (const pattern of jsLibraryPatterns) {\n const matches = normalizedStr.match(pattern);\n if (matches) {\n libraryMatches += matches.length;\n }\n }\n\n // Check for balanced braces and parentheses (indicates code structure)\n const openBraces = (normalizedStr.match(/{/g) || []).length;\n const closeBraces = (normalizedStr.match(/}/g) || []).length;\n const openParens = (normalizedStr.match(/\\(/g) || []).length;\n const closeParens = (normalizedStr.match(/\\)/g) || []).length;\n const openBrackets = (normalizedStr.match(/\\[/g) || []).length;\n const closeBrackets = (normalizedStr.match(/\\]/g) || []).length;\n\n const hasBalancedStructure = (\n Math.abs(openBraces - closeBraces) <= 1 &&\n Math.abs(openParens - closeParens) <= 1 &&\n Math.abs(openBrackets - closeBrackets) <= 1\n );\n\n // Scoring system\n let score = 0;\n\n // Keywords contribute significantly\n score += keywordMatches.length * 1;\n\n // Syntax patterns contribute moderately\n score += patternMatches * 2;\n\n // Library patterns contribute moderately\n score += libraryMatches * 2;\n\n // Balanced structure contributes\n if (hasBalancedStructure && (openBraces > 0 || openParens > 0)) {\n score += 5;\n }\n\n // Check for semicolons (common in JS)\n const semicolons = (normalizedStr.match(/;/g) || []).length;\n score += semicolons * 1;\n\n // Check for common JS file extensions or script tags\n if (normalizedStr.includes('.js') || normalizedStr.includes('<script')) {\n score += 10;\n }\n\n // Threshold for considering it JavaScript code\n // Adjust this threshold based on your needs\n const threshold = 8;\n\n return score >= threshold;\n}","import type { IEbiContextData } from '../models/IAbiContext';\nimport type { AgentContext, User } from '../models/contexts';\n\nexport const setEbiContextData = (window: any, user: User, context: AgentContext | null = null, sessionId: string | null = null) => {\n const ebiContextData = window.customElements.get('ebi-context-data') as unknown as IEbiContextData;\n if (ebiContextData) {\n ebiContextData.user = user;\n ebiContextData.context = context || null;\n ebiContextData.sessionId = sessionId\n }\n}\n\nexport const setEbiContextSessionId = (sessionId: string) => {\n const ebiContextData = window.customElements.get('ebi-context-data') as unknown as IEbiContextData;\n if (ebiContextData) {\n ebiContextData.sessionId = sessionId\n }\n}","/**\n * Material Icons List\n * \n * This file contains a curated list of 200 Material Icons for use with\n * the Material Icons font: <i className=\"material-icons\">icon_name</i>\n * \n * Each icon has:\n * - iconName: lowercase snake_case name for use in the material-icons class\n * - friendlyName: Human-readable display name\n */\n\nexport interface MaterialIcon {\n iconName: string;\n friendlyName: string;\n}\n\n/**\n * Converts PascalCase to snake_case lowercase\n * Example: AccessAlarm -> access_alarm\n */\nfunction pascalToSnakeCase(str: string): string {\n return str\n .replace(/([A-Z])/g, '_$1')\n .toLowerCase()\n .replace(/^_/, '');\n}\n\n/**\n * Converts PascalCase to friendly name with spaces\n * Example: AccessAlarm -> Access Alarm\n */\nfunction pascalToFriendlyName(str: string): string {\n return str\n .replace(/([A-Z])/g, ' $1')\n .trim();\n}\n\n// Raw icon names in PascalCase (MUI format)\nconst rawIconNames = [\n // === ACTION ICONS ===\n 'Add',\n 'Remove',\n 'Delete',\n 'Edit',\n 'Save',\n 'Cancel',\n 'Check',\n 'Close',\n 'Done',\n 'Clear',\n 'Search',\n 'Refresh',\n 'Undo',\n 'Redo',\n 'Print',\n 'Download',\n 'Upload',\n 'Share',\n 'Copy',\n 'ContentCopy',\n 'ContentPaste',\n 'ContentCut',\n 'SelectAll',\n 'Sync',\n 'Settings',\n 'MoreVert',\n 'MoreHoriz',\n 'FilterList',\n 'Sort',\n 'ZoomIn',\n 'ZoomOut',\n 'Fullscreen',\n 'FullscreenExit',\n 'OpenInNew',\n 'Launch',\n 'Send',\n 'Reply',\n 'Forward',\n 'Archive',\n 'Unarchive',\n\n // === NAVIGATION ICONS ===\n 'Home',\n 'Menu',\n 'ArrowBack',\n 'ArrowForward',\n 'ArrowUpward',\n 'ArrowDownward',\n 'ChevronLeft',\n 'ChevronRight',\n 'ExpandMore',\n 'ExpandLess',\n 'FirstPage',\n 'LastPage',\n 'NavigateBefore',\n 'NavigateNext',\n 'Apps',\n 'Dashboard',\n 'Inbox',\n 'Explore',\n 'History',\n 'Bookmark',\n 'BookmarkBorder',\n\n // === COMMUNICATION ICONS ===\n 'Email',\n 'Phone',\n 'Message',\n 'Chat',\n 'Forum',\n 'Comment',\n 'Notifications',\n 'NotificationsActive',\n 'NotificationsOff',\n 'Call',\n 'CallEnd',\n 'Contacts',\n 'ContactMail',\n 'ContactPhone',\n 'Person',\n 'PersonAdd',\n 'PersonRemove',\n 'People',\n 'Group',\n 'Groups',\n\n // === CONTENT ICONS ===\n 'Folder',\n 'FolderOpen',\n 'CreateNewFolder',\n 'Description',\n 'InsertDriveFile',\n 'AttachFile',\n 'Link',\n 'LinkOff',\n 'Image',\n 'Photo',\n 'PhotoLibrary',\n 'VideoLibrary',\n 'Movie',\n 'MusicNote',\n 'Audiotrack',\n 'Article',\n 'Feed',\n 'List',\n 'ViewList',\n 'GridView',\n 'TableChart',\n 'BarChart',\n 'PieChart',\n 'ShowChart',\n 'Timeline',\n 'Assessment',\n 'Analytics',\n\n // === STATUS & INFO ICONS ===\n 'Info',\n 'Warning',\n 'Error',\n 'Help',\n 'HelpOutline',\n 'CheckCircle',\n 'Cancel',\n 'Block',\n 'Report',\n 'ReportProblem',\n 'Verified',\n 'VerifiedUser',\n 'Security',\n 'Lock',\n 'LockOpen',\n 'Visibility',\n 'VisibilityOff',\n 'Public',\n 'PrivacyTip',\n\n // === DEVICE & HARDWARE ICONS ===\n 'Computer',\n 'DesktopWindows',\n 'Laptop',\n 'Smartphone',\n 'Tablet',\n 'Watch',\n 'Tv',\n 'Router',\n 'Wifi',\n 'WifiOff',\n 'Bluetooth',\n 'BluetoothDisabled',\n 'Battery',\n 'BatteryFull',\n 'BatteryAlert',\n 'SignalCellularAlt',\n 'Storage',\n 'Memory',\n 'Usb',\n 'Keyboard',\n 'Mouse',\n 'Print',\n 'Scanner',\n 'Camera',\n 'Mic',\n 'MicOff',\n 'Videocam',\n 'VideocamOff',\n 'Speaker',\n 'VolumeUp',\n 'VolumeDown',\n 'VolumeMute',\n 'VolumeOff',\n\n // === TIME & DATE ICONS ===\n 'Schedule',\n 'AccessTime',\n 'Timer',\n 'Timelapse',\n 'Today',\n 'Event',\n 'EventAvailable',\n 'EventBusy',\n 'CalendarToday',\n 'CalendarMonth',\n 'DateRange',\n 'Alarm',\n 'AlarmOn',\n 'AlarmOff',\n\n // === LOCATION & MAP ICONS ===\n 'Place',\n 'LocationOn',\n 'LocationOff',\n 'MyLocation',\n 'GpsFixed',\n 'Map',\n 'Directions',\n 'DirectionsCar',\n 'DirectionsBus',\n 'DirectionsWalk',\n 'Flight',\n 'LocalShipping',\n 'Store',\n 'Business',\n\n // === SOCIAL & RATING ICONS ===\n 'ThumbUp',\n 'ThumbDown',\n 'Favorite',\n 'FavoriteBorder',\n 'Star',\n 'StarBorder',\n 'StarHalf',\n 'Grade',\n 'Flag',\n 'EmojiEmotions',\n 'SentimentSatisfied',\n 'SentimentDissatisfied',\n\n // === EDITOR & FORMAT ICONS ===\n 'FormatBold',\n 'FormatItalic',\n 'FormatUnderlined',\n 'FormatAlignLeft',\n 'FormatAlignCenter',\n 'FormatAlignRight',\n 'FormatAlignJustify',\n 'FormatListBulleted',\n 'FormatListNumbered',\n 'FormatIndentIncrease',\n 'FormatIndentDecrease',\n 'FormatQuote',\n 'Title',\n 'TextFields',\n 'Code',\n 'Functions',\n 'Highlight',\n 'ColorLens',\n 'Palette',\n 'Brush',\n 'Create',\n];\n\n/**\n * Curated list of 200 Material Icons\n */\nexport const materialIcons: MaterialIcon[] = rawIconNames.map(name => ({\n iconName: pascalToSnakeCase(name),\n friendlyName: pascalToFriendlyName(name),\n}));\n\n/**\n * Get an icon by its snake_case name\n */\nexport function getIconByName(iconName: string): MaterialIcon | undefined {\n return materialIcons.find(icon => icon.iconName === iconName);\n}\n\n/**\n * Search icons by friendly name (case-insensitive partial match)\n */\nexport function searchIcons(query: string): MaterialIcon[] {\n const lowerQuery = query.toLowerCase();\n return materialIcons.filter(icon =>\n icon.friendlyName.toLowerCase().includes(lowerQuery) ||\n icon.iconName.includes(lowerQuery)\n );\n}\n\n/**\n * Icons grouped by category for easier browsing\n */\nexport const iconCategories = {\n action: materialIcons.slice(0, 40),\n navigation: materialIcons.slice(40, 61),\n communication: materialIcons.slice(61, 81),\n content: materialIcons.slice(81, 107),\n status: materialIcons.slice(107, 126),\n device: materialIcons.slice(126, 159),\n time: materialIcons.slice(159, 173),\n location: materialIcons.slice(173, 187),\n social: materialIcons.slice(187, 199),\n editor: materialIcons.slice(199),\n};\n\nexport default materialIcons;\n","// Google OAuth Configuration\n// Replace this with your actual Google OAuth client ID\n// You can get this from the Google Cloud Console: https://console.cloud.google.com/\n\nimport { getEnvVar } from '../utils/envUtils.js';\n\nexport const GOOGLE_CLIENT_ID = getEnvVar('VITE_GOOGLE_CLIENT_ID');\n\n// Optional: Configure allowed domains for authentication\nexport const ALLOWED_DOMAINS = [\n \"envisiontecnologia.com.br\"\n];\n\nexport const ALLOWED_EMAILS = getEnvVar('ALLOWED_EMAILS')?.split(',') ?? [];\n\n// Optional: Configure authentication requirements\nexport const AUTH_CONFIG = {\n requireAuthentication: true,\n allowAnonymousAccess: false,\n sessionTimeout: 24 * 60 * 60 * 1000, // 24 hours in milliseconds\n GOOGLE_API_KEY: getEnvVar('GOOGLE_API_KEY')\n}; "],"names":["base_production_url","base_url_local","getAgentBaseUrl","__name","window","agentBaseUrlOverride","GCS_BUCKET_IMAGE_PATH","getArtifactsBaseUrl","runningOnCaddy","__vite_import_meta_env__","getDotNetBaseUrl","localHostUrl","location","dateReviver","_key","value","normalizeFilename","text","normalized","_hasBuffer","_TD","_TE","b64ch","b64chs","b64tab","a","tab","c","i","b64re","_fromCC","_U8Afrom","it","_mkUriSafe","src","m0","_tidyB64","s","btoaPolyfill","bin","u32","c0","c1","c2","asc","pad","_btoa","_fromUint8Array","u8a","strs","l","cb_utob","cc","re_utob","utob","u","_encode","encode","urlsafe","re_btou","cb_btou","cccc","cp","offset","btou","b","atobPolyfill","u24","r1","r2","binArray","_atob","_toUint8Array","_decode","_unURI","decode","isValid","decodeBase64","base64","encodeBase64","decodeUriFromPython","uriEncoded","error","isBase64Encoded","parseArtifactFromJson","json","interactionId","convertedHtml","ret","artifactId","data","defaultSectionId","ArtifactType","prettiffyFileName","_a","_b","_c","isUriEncoded","str","percentEncodedPattern","percentMatches","uriEncodedPatterns","pattern","decodeUri","encodedString","encodeUri","string","isValidUri","uri","parseUriParams","queryString","params","cleanQuery","pairs","pair","key","setEbiContextData","user","context","sessionId","ebiContextData","setEbiContextSessionId","pascalToSnakeCase","pascalToFriendlyName","rawIconNames","materialIcons","name","getIconByName","iconName","icon","searchIcons","query","lowerQuery","iconCategories","GOOGLE_CLIENT_ID","getEnvVar","ALLOWED_DOMAINS","ALLOWED_EMAILS","AUTH_CONFIG"],"mappings":";;;;AAEA,MAAMA,IAAsB,gCACtBC,IAAiB,0BAEVC,KAAkB,gBAAAC,EAAA,CAACC,MACV,IAAI,gBAAgBA,EAAO,SAAS,MAAM,EAClC,IAAI,OAAO,MAAM,SAE1BH,IAAkBI,EAAA,KAA0BL,GAJlC,oBCJzBM,IAAwB,wDAGjBC,KAAsB,gBAAAJ,EAAA,MACxBG,GADwB,gCCF7BE,KAAmBC,KAAA,gBAAAA,EAAyB,eAAyB;AAOpE,SAASC,KAA2B;AACvC,QAAMC,IAAeH,IAAiB,8BAA8B;AAIpE,MAAI,OAAO,SAAW,QAAe,yBAAQ,WAAU;AACnD,UAAMI,IAAW,OAAO,SAAS,KAAK,YAAA;AAKtC,WAAIA,EAAS,QAAQ,iBAAiB,IAAI,KAC/B,qCAGPA,EAAS,QAAQ,WAAW,IAAI,KAEzBD,IAIJN,OAA0B;AAAA,EACrC;AAGA,SAAI,OAAO,UAAY,OAAe,QAAQ,QAEnC,QAAQ,IAAI,kBAAkB,QAAQ,IAAI,mBAAkBM;AAI3E;AA/BgBR,EAAAO,IAAA;ACTT,SAASG,GAAYC,GAAWC,GAAY;AAOjD,SAAI,OAAOA,KAAU,YAJA,mDAIyB,KAAKA,CAAK,IAC/C,IAAI,KAAKA,CAAK,IAIhBA;AACT;AAbgBZ,EAAAU,IAAA;ACKT,SAASG,EAAkBC,GAAsB;AAGpD,MAAIC,IAAaD,EAAK,UAAU,KAAK;AAGrC,SAAAC,IAAaA,EAAW,QAAQ,uBAAuB,EAAE,GAElDA;AACX;AATgBf,EAAAa,GAAA;ACWhB,MAAMG,IAAa,OAAO,UAAW,YAC/BC,IAAM,OAAO,eAAgB,aAAa,IAAI,YAAW,IAAK,QAC9DC,IAAM,OAAO,eAAgB,aAAa,IAAI,YAAW,IAAK,QAC9DC,IAAQ,qEACRC,IAAS,MAAM,UAAU,MAAM,KAAKD,CAAK,GACzCE,KAAU,CAACC,MAAM;AACnB,MAAIC,IAAM,CAAA;AACV,SAAAD,EAAE,QAAQ,CAACE,GAAGC,MAAMF,EAAIC,CAAC,IAAIC,CAAC,GACvBF;AACX,GAAGH,CAAM,GACHM,IAAQ,2EACRC,IAAU,OAAO,aAAa,KAAK,MAAM,GACzCC,IAAW,OAAO,WAAW,QAAS,aACtC,WAAW,KAAK,KAAK,UAAU,IAC/B,CAACC,MAAO,IAAI,WAAW,MAAM,UAAU,MAAM,KAAKA,GAAI,CAAC,CAAC,GACxDC,IAAa,gBAAA9B,EAAA,CAAC+B,MAAQA,EACvB,QAAQ,MAAM,EAAE,EAAE,QAAQ,UAAU,CAACC,MAAOA,KAAM,MAAM,MAAM,GAAG,GADnD,eAEbC,IAAW,gBAAAjC,EAAA,CAACkC,MAAMA,EAAE,QAAQ,qBAAqB,EAAE,GAAxC,aAIXC,IAAe,gBAAAnC,EAAA,CAACoC,MAAQ;AAE1B,MAAIC,GAAKC,GAAIC,GAAIC,GAAIC,IAAM;AAC3B,QAAMC,IAAMN,EAAI,SAAS;AACzB,WAASX,IAAI,GAAGA,IAAIW,EAAI,UAAS;AAC7B,SAAKE,IAAKF,EAAI,WAAWX,GAAG,KAAK,QAC5Bc,IAAKH,EAAI,WAAWX,GAAG,KAAK,QAC5Be,IAAKJ,EAAI,WAAWX,GAAG,KAAK;AAC7B,YAAM,IAAI,UAAU,yBAAyB;AACjD,IAAAY,IAAOC,KAAM,KAAOC,KAAM,IAAKC,GAC/BC,KAAOrB,EAAOiB,KAAO,KAAK,EAAE,IACtBjB,EAAOiB,KAAO,KAAK,EAAE,IACrBjB,EAAOiB,KAAO,IAAI,EAAE,IACpBjB,EAAOiB,IAAM,EAAE;AAAA,EACzB;AACA,SAAOK,IAAMD,EAAI,MAAM,GAAGC,IAAM,CAAC,IAAI,MAAM,UAAUA,CAAG,IAAID;AAChE,GAhBqB,iBAsBfE,IAAQ,OAAO,QAAS,aAAa,CAACP,MAAQ,KAAKA,CAAG,IACtDpB,IAAa,CAACoB,MAAQ,OAAO,KAAKA,GAAK,QAAQ,EAAE,SAAS,QAAQ,IAC9DD,GACJS,IAAkB5B,IAClB,CAAC6B,MAAQ,OAAO,KAAKA,CAAG,EAAE,SAAS,QAAQ,IAC3C,CAACA,MAAQ;AAGP,MAAIC,IAAO,CAAA;AACX,WAASrB,IAAI,GAAGsB,IAAIF,EAAI,QAAQpB,IAAIsB,GAAGtB,KAAK;AACxC,IAAAqB,EAAK,KAAKnB,EAAQ,MAAM,MAAMkB,EAAI,SAASpB,GAAGA,IAAI,IAAO,CAAC,CAAC;AAE/D,SAAOkB,EAAMG,EAAK,KAAK,EAAE,CAAC;AAC9B,GAUEE,IAAU,gBAAAhD,EAAA,CAACwB,MAAM;AACnB,MAAIA,EAAE,SAAS,GAAG;AACd,QAAIyB,IAAKzB,EAAE,WAAW,CAAC;AACvB,WAAOyB,IAAK,MAAOzB,IACbyB,IAAK,OAAStB,EAAQ,MAAQsB,MAAO,CAAE,IACnCtB,EAAQ,MAAQsB,IAAK,EAAK,IACzBtB,EAAQ,MAASsB,MAAO,KAAM,EAAK,IAChCtB,EAAQ,MAASsB,MAAO,IAAK,EAAK,IAClCtB,EAAQ,MAAQsB,IAAK,EAAK;AAAA,EAC5C,OACK;AACD,QAAIA,IAAK,SACFzB,EAAE,WAAW,CAAC,IAAI,SAAU,QAC5BA,EAAE,WAAW,CAAC,IAAI;AACzB,WAAQG,EAAQ,MAASsB,MAAO,KAAM,CAAK,IACrCtB,EAAQ,MAASsB,MAAO,KAAM,EAAK,IACnCtB,EAAQ,MAASsB,MAAO,IAAK,EAAK,IAClCtB,EAAQ,MAAQsB,IAAK,EAAK;AAAA,EACpC;AACJ,GAnBgB,YAoBVC,IAAU,iDAMVC,IAAO,gBAAAnD,EAAA,CAACoD,MAAMA,EAAE,QAAQF,GAASF,CAAO,GAAjC,SAEPK,IAAUrC,IACV,CAACkB,MAAM,OAAO,KAAKA,GAAG,MAAM,EAAE,SAAS,QAAQ,IAC/ChB,IACI,CAACgB,MAAMU,EAAgB1B,EAAI,OAAOgB,CAAC,CAAC,IACpC,CAACA,MAAMS,EAAMQ,EAAKjB,CAAC,CAAC,GAMxBoB,IAAS,gBAAAtD,EAAA,CAAC+B,GAAKwB,IAAU,OAAUA,IACnCzB,EAAWuB,EAAQtB,CAAG,CAAC,IACvBsB,EAAQtB,CAAG,GAFF,WAWTyB,IAAU,+EACVC,IAAU,gBAAAzD,EAAA,CAAC0D,MAAS;AACtB,UAAQA,EAAK,QAAM;AAAA,IACf,KAAK;AACD,UAAIC,KAAO,IAAOD,EAAK,WAAW,CAAC,MAAM,MACjC,KAAOA,EAAK,WAAW,CAAC,MAAM,MAC9B,KAAOA,EAAK,WAAW,CAAC,MAAM,IAC/B,KAAOA,EAAK,WAAW,CAAC,GAAIE,IAASD,IAAK;AACjD,aAAQhC,GAASiC,MAAW,MAAM,KAAM,IAClCjC,GAASiC,IAAS,QAAS,KAAM;AAAA,IAC3C,KAAK;AACD,aAAOjC,GAAU,KAAO+B,EAAK,WAAW,CAAC,MAAM,MACvC,KAAOA,EAAK,WAAW,CAAC,MAAM,IAC/B,KAAOA,EAAK,WAAW,CAAC,CAAE;AAAA,IACrC;AACI,aAAO/B,GAAU,KAAO+B,EAAK,WAAW,CAAC,MAAM,IACxC,KAAOA,EAAK,WAAW,CAAC,CAAE;AAAA,EAC7C;AACA,GAjBgB,YAuBVG,IAAO,gBAAA7D,EAAA,CAAC8D,MAAMA,EAAE,QAAQN,GAASC,CAAO,GAAjC,SAIPM,IAAe,gBAAA/D,EAAA,CAACyC,MAAQ;AAG1B,MADAA,IAAMA,EAAI,QAAQ,QAAQ,EAAE,GACxB,CAACf,EAAM,KAAKe,CAAG;AACf,UAAM,IAAI,UAAU,mBAAmB;AAC3C,EAAAA,KAAO,KAAK,MAAM,KAAKA,EAAI,SAAS,EAAE;AACtC,MAAIuB,GAAKC,GAAIC,GACTC,IAAW,CAAA;AACf,WAAS1C,IAAI,GAAGA,IAAIgB,EAAI;AACpB,IAAAuB,IAAM3C,EAAOoB,EAAI,OAAOhB,GAAG,CAAC,KAAK,KAC3BJ,EAAOoB,EAAI,OAAOhB,GAAG,CAAC,KAAK,MAC1BwC,IAAK5C,EAAOoB,EAAI,OAAOhB,GAAG,CAAC,MAAM,KACjCyC,IAAK7C,EAAOoB,EAAI,OAAOhB,GAAG,CAAC,IAC9BwC,MAAO,KACPE,EAAS,KAAKxC,EAAQqC,KAAO,KAAK,GAAG,CAAC,IAEjCE,MAAO,KACZC,EAAS,KAAKxC,EAAQqC,KAAO,KAAK,KAAKA,KAAO,IAAI,GAAG,CAAC,IAGtDG,EAAS,KAAKxC,EAAQqC,KAAO,KAAK,KAAKA,KAAO,IAAI,KAAKA,IAAM,GAAG,CAAC;AAGzE,SAAOG,EAAS,KAAK,EAAE;AAC3B,GAxBqB,iBA8BfC,IAAQ,OAAO,QAAS,aAAa,CAAC3B,MAAQ,KAAKR,EAASQ,CAAG,CAAC,IAChEzB,IAAa,CAACyB,MAAQ,OAAO,KAAKA,GAAK,QAAQ,EAAE,SAAS,QAAQ,IAC9DsB,GAEJM,IAAgBrD,IAChB,CAACM,MAAMM,EAAS,OAAO,KAAKN,GAAG,QAAQ,CAAC,IACxC,CAACA,MAAMM,EAASwC,EAAM9C,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,CAAAE,MAAKA,EAAE,WAAW,CAAC,CAAC,CAAC,GAM5D8C,IAAUtD,IACV,CAACM,MAAM,OAAO,KAAKA,GAAG,QAAQ,EAAE,SAAS,MAAM,IAC/CL,IACI,CAACK,MAAML,EAAI,OAAOoD,EAAc/C,CAAC,CAAC,IAClC,CAACA,MAAMuC,EAAKO,EAAM9C,CAAC,CAAC,GACxBiD,IAAS,gBAAAvE,EAAA,CAACsB,MAAMW,EAASX,EAAE,QAAQ,SAAS,CAACU,MAAOA,KAAM,MAAM,MAAM,GAAG,CAAC,GAAjE,WAMTwC,IAAS,gBAAAxE,EAAA,CAAC+B,MAAQuC,EAAQC,EAAOxC,CAAG,CAAC,GAA5B,WAKT0C,IAAU,gBAAAzE,EAAA,CAAC+B,MAAQ;AACrB,MAAI,OAAOA,KAAQ;AACf,WAAO;AACX,QAAMG,IAAIH,EAAI,QAAQ,QAAQ,EAAE,EAAE,QAAQ,WAAW,EAAE;AACvD,SAAO,CAAC,oBAAoB,KAAKG,CAAC,KAAK,CAAC,oBAAoB,KAAKA,CAAC;AACtE,GALgB;ACjLT,SAASwC,GAAaC,GAAwB;AACnD,SAAOH,EAAO,mBAAmBG,CAAM,CAAC;AAC1C;AAFgB3E,EAAA0E,IAAA;AAIT,SAASE,GAAaD,GAAwB;AACnD,SAAO,mBAAmBrB,EAAOqB,CAAM,CAAC;AAC1C;AAFgB3E,EAAA4E,IAAA;AAKT,SAASC,GAAoBC,GAA4B;AAC9D,MAAI;AACF,WAAO,mBAAmBA,CAAU;AAAA,EACtC,SAASC,GAAO;AACd,mBAAQ,KAAK,yBAAyBA,CAAK,GACpCD;AAAA,EACT;AACF;AAPgB9E,EAAA6E,IAAA;AAST,SAASG,GAAgBL,GAAyB;AACvD,SAAOF,EAAQ,mBAAmBE,CAAM,CAAC;AAC3C;AAFgB3E,EAAAgF,IAAA;ACnDT,SAASC,GAAsBC,GAAoBC,GAA4C;;AACpG,MAAIC,GACAC,IAA2B;AAE/B,MAAI,CAACH,EAAK;AACR,mBAAQ,MAAM,qCAAqC,GAC5C;AAGT,QAAMI,IAAazE,EAAkBqE,EAAK,SAAS;AACnD,MAAIA,EAAK,aAAa,aAAa;AAEjC,QAAI;AACF,YAAMK,IAAOL,KAAA,gBAAAA,EAAM;AACnB,MAAIK,IACFH,IAAgBV,GAAaa,CAAI,IAGjCH,IAAgB;AAAA,IAEpB,SAASL,GAAO;AACd,qBAAQ,MAAM,6BAA6BA,CAAK,GACzC;AAAA,IACT;AAEA,UAAMS,IAAmBN,EAAK,SAASO,EAAa,YAAY,eAAe;AAE/E,WAAKP,EAAK,cACR,QAAQ,KAAK,4CAA4C,GACzDA,EAAK,YAAY,KAAK,IAAA,EAAM,SAAA,IAGzBA,EAAK,cACR,QAAQ,MAAM,4CAA4C,GAC1DA,EAAK,YAAY,KAAK,IAAA,EAAM,SAAA,IAG9BG,IAAM;AAAA,MACJ,WAAWH,EAAK;AAAA,MAChB,IAAII;AAAA,MACJ,aAAaJ,EAAK,eAAeQ,EAAkBR,EAAK,SAAS,KAAK;AAAA,MACtE,oBAAoBA,EAAK,aAAa;AAAA,MACtC,qBAAqBI;AAAA,MACrB,MAAMJ,EAAK;AAAA,MACX,MAAME;AAAA,MACN,eAAAD;AAAA,MACA,UAAS,oBAAI,KAAA,GAAO,YAAA;AAAA,MACpB,WAAWK;AAAA,MACX,aAAWG,IAAAT,EAAK,cAAL,gBAAAS,EAAgB,WAAU;AAAA,MACrC,gBAAgB;AAAA,IAAA,GAElBN,EAAI,YAAYG,GAChBH,EAAI,cAAYO,IAAAV,EAAK,cAAL,gBAAAU,EAAgB,WAAU,IAEnCP;AAAA,EACT;AAEE,IAAKH,EAAK,cACR,QAAQ,MAAM,4CAA4C,GAC1DA,EAAK,YAAY,KAAK,IAAA,EAAM,SAAA,IAG1BA,EAAK,aACPG,IAAM;AAAA,MACJ,WAAWH,EAAK;AAAA,MAChB,IAAII;AAAA,MACJ,aAAaJ,EAAK,eAAeQ,EAAkBR,EAAK,SAAS,KAAK;AAAA,MACtE,aAAWW,IAAAX,EAAK,cAAL,gBAAAW,EAAgB,WAAU;AAAA,MACrC,oBAAoBX,EAAK;AAAA,MACzB,qBAAqBA,EAAK;AAAA,MAC1B,MAAMO,EAAa;AAAA,MACnB,eAAAN;AAAA,MACA,WAAW;AAAA,MACX,UAAS,oBAAI,KAAA,GAAO,YAAA;AAAA,MACpB,gBAAgB;AAAA,IAAA,GAElBE,EAAI,YAAY,UAChBA,EAAI,cAAc,EAAE,WAAWH,EAAK,aAAa,YAAY,MAAMA,EAAK,QAAQ,GAAA,KAGhF,QAAQ,MAAM,+CAA+C;AAIjE,SAAOG;AACT;AArFgBrF,EAAAiF,IAAA;ACET,SAASa,GAAaC,GAAsB;AAM/C,MALI,CAACA,KAAO,OAAOA,KAAQ,YAKvBA,EAAI,WAAW;AACf,WAAO;AAIX,QAAMC,IAAwB,oBACxBC,IAAiBF,EAAI,MAAMC,CAAqB;AAEtD,MAAIC,KAAkBA,EAAe,SAAS;AAC1C,WAAO;AAIX,QAAMC,IAAqB;AAAA,IACvB;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,EAAA;AAGJ,aAAWC,KAAWD;AAClB,QAAIC,EAAQ,KAAKJ,CAAG;AAChB,aAAO;AAUf,SALsC,kCACyB,KAAKA,CAAG,KAIvC,CAACE,GACtB;AAIf;AApDgBjG,EAAA8F,IAAA;AA2DT,SAASM,EAAUC,GAA+B;AACrD,MAAI;AACA,WAAO,mBAAmBA,CAAa;AAAA,EAC3C,SAAStB,GAAO;AACZ,mBAAQ,KAAK,yBAAyBA,CAAK,GACpCsB;AAAA,EACX;AACJ;AAPgBrG,EAAAoG,GAAA;AAcT,SAASE,GAAUC,GAAwB;AAC9C,MAAI;AACA,WAAO,mBAAmBA,CAAM;AAAA,EACpC,SAASxB,GAAO;AACZ,mBAAQ,KAAK,yBAAyBA,CAAK,GACpCwB;AAAA,EACX;AACJ;AAPgBvG,EAAAsG,IAAA;AAcT,SAASE,GAAWC,GAAsB;AAC7C,MAAI;AACA,eAAI,IAAIA,CAAG,GACJ;AAAA,EACX,QAAgB;AACZ,WAAO;AAAA,EACX;AACJ;AAPgBzG,EAAAwG,IAAA;AAcT,SAASE,GAAeC,GAA6C;AACxE,QAAMC,IAAiC,CAAA,GAGjCC,IAAaF,EAAY,WAAW,GAAG,IAAIA,EAAY,MAAM,CAAC,IAAIA;AAExE,MAAI,CAACE;AACD,WAAOD;AAGX,QAAME,IAAQD,EAAW,MAAM,GAAG;AAElC,aAAWE,KAAQD,GAAO;AACtB,UAAM,CAACE,GAAKpG,CAAK,IAAImG,EAAK,MAAM,GAAG;AACnC,IAAIC,MACAJ,EAAOR,EAAUY,CAAG,CAAC,IAAIpG,IAAQwF,EAAUxF,CAAK,IAAI;AAAA,EAE5D;AAEA,SAAOgG;AACX;AApBgB5G,EAAA0G,IAAA;AC3GT,MAAMO,KAAoB,gBAAAjH,EAAA,CAACC,GAAaiH,GAAYC,IAA+B,MAAMC,IAA2B,SAAS;AAChI,QAAMC,IAAiBpH,EAAO,eAAe,IAAI,kBAAkB;AACnE,EAAIoH,MACAA,EAAe,OAAOH,GACtBG,EAAe,UAAUF,KAAW,MACpCE,EAAe,YAAYD;AAEnC,GAPiC,sBASpBE,KAAyB,gBAAAtH,EAAA,CAACoH,MAAsB;AACzD,QAAMC,IAAiB,OAAO,eAAe,IAAI,kBAAkB;AACnE,EAAIA,MACAA,EAAe,YAAYD;AAEnC,GALsC;ACQtC,SAASG,GAAkBxB,GAAqB;AAC9C,SAAOA,EACJ,QAAQ,YAAY,KAAK,EACzB,cACA,QAAQ,MAAM,EAAE;AACrB;AALS/F,EAAAuH,IAAA;AAWT,SAASC,GAAqBzB,GAAqB;AACjD,SAAOA,EACJ,QAAQ,YAAY,KAAK,EACzB,KAAA;AACL;AAJS/F,EAAAwH,IAAA;AAOT,MAAMC,KAAe;AAAA;AAAA,EAEnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKaC,IAAgCD,GAAa,IAAI,CAAAE,OAAS;AAAA,EACrE,UAAUJ,GAAkBI,CAAI;AAAA,EAChC,cAAcH,GAAqBG,CAAI;AACzC,EAAE;AAKK,SAASC,GAAcC,GAA4C;AACxE,SAAOH,EAAc,KAAK,CAAAI,MAAQA,EAAK,aAAaD,CAAQ;AAC9D;AAFgB7H,EAAA4H,IAAA;AAOT,SAASG,GAAYC,GAA+B;AACzD,QAAMC,IAAaD,EAAM,YAAA;AACzB,SAAON,EAAc;AAAA,IAAO,CAAAI,MAC1BA,EAAK,aAAa,YAAA,EAAc,SAASG,CAAU,KACnDH,EAAK,SAAS,SAASG,CAAU;AAAA,EAAA;AAErC;AANgBjI,EAAA+H,IAAA;AAWT,MAAMG,KAAiB;AAAA,EAC5B,QAAQR,EAAc,MAAM,GAAG,EAAE;AAAA,EACjC,YAAYA,EAAc,MAAM,IAAI,EAAE;AAAA,EACtC,eAAeA,EAAc,MAAM,IAAI,EAAE;AAAA,EACzC,SAASA,EAAc,MAAM,IAAI,GAAG;AAAA,EACpC,QAAQA,EAAc,MAAM,KAAK,GAAG;AAAA,EACpC,QAAQA,EAAc,MAAM,KAAK,GAAG;AAAA,EACpC,MAAMA,EAAc,MAAM,KAAK,GAAG;AAAA,EAClC,UAAUA,EAAc,MAAM,KAAK,GAAG;AAAA,EACtC,QAAQA,EAAc,MAAM,KAAK,GAAG;AAAA,EACpC,QAAQA,EAAc,MAAM,GAAG;AACjC,GC3TaS,KAAmBC,EAAU,uBAAuB,GAGpDC,KAAkB;AAAA,EAC3B;AACJ;;AAEO,MAAMC,OAAiB3C,IAAAyC,EAAU,gBAAgB,MAA1B,gBAAAzC,EAA6B,MAAM,SAAQ,CAAA,GAG5D4C,KAAc;AAAA,EACvB,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,gBAAgB,OAAU,KAAK;AAAA;AAAA,EAC/B,gBAAgBH,EAAU,gBAAgB;AAC9C;","x_google_ignoreList":[5]}
|