@visma-swno/gaia-chat-ui 2.0.1 → 2.0.3
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/{index-Dftc0ILX.js → index-CdLh5lbh.js} +368 -360
- package/dist/index-CdLh5lbh.js.map +1 -0
- package/dist/index.es.js +1 -1
- package/dist/index.umd.js +111 -111
- package/dist/index.umd.js.map +1 -1
- package/dist/{nb-BeLfjOx5.js → nb-CpHjB6yw.js} +3 -2
- package/dist/nb-CpHjB6yw.js.map +1 -0
- package/dist/package.json.d.ts +1 -1
- package/dist/src/components/composer.d.ts +1 -1
- package/dist/src/components/composer.d.ts.map +1 -1
- package/dist/src/core/effects/stream-event-router.d.ts.map +1 -1
- package/dist/src/core/errors/app-error.d.ts.map +1 -1
- package/dist/src/core/events/transport/sse.d.ts +2 -0
- package/dist/src/core/events/transport/sse.d.ts.map +1 -1
- package/dist/src/generated/locales/nb.d.ts +1 -0
- package/dist/src/generated/locales/nb.d.ts.map +1 -1
- package/dist/src/infra/sse/stream-error.d.ts +2 -1
- package/dist/src/infra/sse/stream-error.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/index-Dftc0ILX.js.map +0 -1
- package/dist/nb-BeLfjOx5.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CdLh5lbh.js","sources":["../node_modules/classnames/index.js","../src/auth/access-token-provider.ts","../src/infra/http/api-error.ts","../src/infra/http/guards.ts","../src/infra/storage/visitor-token-storage.ts","../node_modules/jwt-decode/build/esm/index.js","../src/auth/strategies/strategy.ts","../src/auth/strategies/visitor-token-strategy.ts","../src/auth/strategies/visma-token-strategy.ts","../src/auth/strategy-factory.ts","../node_modules/@lit/localize/internal/locale-status-event.js","../node_modules/@lit/localize/internal/str-tag.js","../node_modules/@lit/localize/internal/default-msg.js","../node_modules/@lit/localize/init/install.js","../node_modules/@lit/localize/internal/localized-controller.js","../node_modules/@lit/localize/internal/localized-decorator.js","../node_modules/@lit/localize/internal/deferred.js","../node_modules/@lit/localize/internal/fnv1a64.js","../node_modules/@lit/localize/internal/id-generation.js","../node_modules/@lit/localize/internal/runtime-msg.js","../node_modules/@lit/localize/init/runtime.js","../src/components/base-tw-element.ts","../src/assets/icons/arrow-up.svg?raw","../src/assets/icons/circle-alert.svg?raw","../src/core/events/internal/commands.ts","../src/components/composer.ts","../src/assets/icons/megaphone.svg?raw","../src/assets/icons/minimize-2.svg?raw","../src/assets/icons/square-pen.svg?raw","../src/components/menu.ts","../src/assets/icons/x.svg?raw","../src/components/error-message.ts","../src/assets/icons/send.svg?raw","../src/components/feedback-form.ts","../src/assets/icons/check.svg?raw","../src/assets/icons/chevron-down.svg?raw","../src/assets/icons/circle-x.svg?raw","../src/assets/icons/file.svg?raw","../src/assets/icons/sparkles.svg?raw","../node_modules/dompurify/dist/purify.es.mjs","../node_modules/marked/lib/marked.esm.js","../src/components/shared/markdown.ts","../src/components/message/base.ts","../src/components/message/assistant.ts","../src/assets/icons/headset.svg?raw","../src/components/message/operator.ts","../src/components/message/system.ts","../src/components/message/user.ts","../src/components/thinking-indicator.ts","../src/assets/icons/lightbulb.svg?raw","../src/assets/icons/message-circle.svg?raw","../src/components/welcome-message.ts","../src/components/message-list.ts","../src/infra/signalr/signalr-error.ts","../src/infra/sse/stream-error.ts","../src/core/errors/app-error.ts","../src/core/state/slices/config-slice.ts","../src/core/state/slices/messages-slice.ts","../src/core/state/slices/session-slice.ts","../src/core/state/slices/ui-slice.ts","../src/core/state/root-reducer.ts","../src/core/state/store.ts","../src/core/state/index.ts","../src/core/effects/bootstrap-effect.ts","../src/infra/storage/conversation-id-storage.ts","../src/core/effects/conversation-effect.ts","../src/core/effects/feedback-effect.ts","../src/core/utils/message-factory.ts","../src/core/effects/stream-event-router.ts","../src/core/effects/task-runner.ts","../src/core/effects/stream-effect.ts","../node_modules/@microsoft/signalr/dist/esm/Errors.js","../node_modules/@microsoft/signalr/dist/esm/HttpClient.js","../node_modules/@microsoft/signalr/dist/esm/ILogger.js","../node_modules/@microsoft/signalr/dist/esm/Loggers.js","../node_modules/@microsoft/signalr/dist/esm/pkg-version.js","../node_modules/@microsoft/signalr/dist/esm/Utils.js","../node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js","../node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js","../node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js","../node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js","../node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js","../node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js","../node_modules/@microsoft/signalr/dist/esm/Subject.js","../node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js","../node_modules/@microsoft/signalr/dist/esm/HubConnection.js","../node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js","../node_modules/@microsoft/signalr/dist/esm/HeaderNames.js","../node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js","../node_modules/@microsoft/signalr/dist/esm/ITransport.js","../node_modules/@microsoft/signalr/dist/esm/AbortController.js","../node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js","../node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js","../node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js","../node_modules/@microsoft/signalr/dist/esm/HttpConnection.js","../node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js","../node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js","../src/core/effects/support-effect.ts","../src/core/events/public/app.ts","../src/infra/http/api-client.ts","../src/infra/storage/bootstrap-config-storage.ts","../src/services/bootstrap-service.ts","../node_modules/eventsource-parser/dist/index.js","../node_modules/eventsource-parser/dist/stream.js","../src/infra/sse/sse.ts","../src/services/chat-service.ts","../src/services/feedback-service.ts","../src/app/controllers/error-controller.ts","../src/generated/locale-codes.ts","../src/app/localization.ts","../src/app/app.ts"],"sourcesContent":["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","export type AuthListeners = {\r\n onUpdated?: (expiresAt: number | null, token: string | null) => void;\r\n onExpiring?: (expiresAt: number, remainingMs: number) => void;\r\n onExpired?: (expiredAt: number) => void;\r\n};\r\n\r\nimport { AuthStrategy } from './strategies/strategy';\r\n\r\ntype StrategyKind = 'visma' | 'visitor';\r\n\r\nexport class AccessTokenProvider {\r\n private strategy: AuthStrategy | null = null;\r\n private kind: StrategyKind | null = null;\r\n\r\n constructor(private listeners: AuthListeners = {}) {}\r\n\r\n setStrategy(kind: StrategyKind, strategy: AuthStrategy) {\r\n this.kind = kind;\r\n this.strategy = strategy;\r\n this.strategy.setListeners(this.listeners);\r\n this.strategy.init();\r\n }\r\n\r\n get strategyKind() {\r\n return this.kind;\r\n }\r\n\r\n getIdentifier() {\r\n return this.requireStrategy().getIdentifier();\r\n }\r\n\r\n async getAccessToken(): Promise<string> {\r\n return this.requireStrategy().getAccessToken();\r\n }\r\n\r\n async clear() {\r\n await this.strategy?.clear();\r\n }\r\n\r\n private requireStrategy() {\r\n if (!this.strategy) throw new Error('Auth not configured');\r\n return this.strategy;\r\n }\r\n}\r\n","export type ApiProblemDetail = {\r\n type?: string;\r\n title?: string;\r\n status?: number;\r\n detail?: string;\r\n instance?: string;\r\n [k: string]: unknown;\r\n};\r\n\r\nexport class ApiError extends Error {\r\n constructor(\r\n message: string,\r\n public readonly status: number,\r\n public readonly url: string,\r\n public readonly innerError?: unknown,\r\n public readonly bodyText?: string,\r\n public readonly problem?: ApiProblemDetail\r\n ) {\r\n super(message);\r\n this.name = 'ApiError';\r\n }\r\n\r\n get isUnauthorized() {\r\n return this.status === 401;\r\n }\r\n get isForbidden() {\r\n return this.status === 403;\r\n }\r\n get isNotFound() {\r\n return this.status === 404;\r\n }\r\n get isServerError() {\r\n return this.status >= 500;\r\n }\r\n get isNetworkError() {\r\n return this.status === 0;\r\n }\r\n}\r\n","import { ApiError, ApiProblemDetail } from './api-error';\r\n\r\nexport async function buildApiError(res: Response) {\r\n let text: string | undefined;\r\n let problem: ApiProblemDetail | undefined;\r\n try {\r\n text = await res.clone().text();\r\n } catch {\r\n text = undefined;\r\n }\r\n try {\r\n const ct = res.headers.get('content-type') || '';\r\n if (ct.includes('application/problem+json') || ct.includes('application/json')) {\r\n problem = JSON.parse(text || '{}');\r\n }\r\n } catch {\r\n problem = undefined;\r\n }\r\n\r\n const msg =\r\n problem?.detail ||\r\n problem?.title ||\r\n (text && text.slice(0, 200)) ||\r\n `HTTP ${res.status} ${res.statusText}`;\r\n return new ApiError(msg, res.status, res.url, undefined, text, problem);\r\n}\r\n\r\nexport async function ensureOk(res: Response) {\r\n if (!res.ok) throw await buildApiError(res);\r\n}\r\n\r\nexport function ensureBody(res: Response) {\r\n if (!res.body) {\r\n throw new ApiError('No response body', res.status, res.url);\r\n }\r\n return res.body;\r\n}\r\n\r\nexport async function ensureBodyJson<T extends object>(res: Response): Promise<T> {\r\n try {\r\n return (await res.json()) as T;\r\n } catch (e) {\r\n throw new ApiError('Failed to parse response body as JSON', res.status, res.url, e);\r\n }\r\n}\r\n","import type { IStorage } from './types';\r\n\r\nexport class VisitorTokenStorage implements IStorage<string> {\r\n private readonly key = 'gaia-chat:visitor-token';\r\n\r\n load(): string | null {\r\n const value = localStorage.getItem(this.key);\r\n if (!value) {\r\n return null;\r\n }\r\n return value;\r\n }\r\n\r\n save(value: string): void {\r\n localStorage.setItem(this.key, value);\r\n }\r\n\r\n clear(): void {\r\n localStorage.removeItem(this.key);\r\n }\r\n}\r\n","export class InvalidTokenError extends Error {\n}\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }));\n}\nfunction base64UrlDecode(str) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n try {\n return b64DecodeUnicode(output);\n }\n catch (err) {\n return atob(output);\n }\n}\nexport function jwtDecode(token, options) {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n options || (options = {});\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n let decoded;\n try {\n decoded = base64UrlDecode(part);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n }\n try {\n return JSON.parse(decoded);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n }\n}\n","import { jwtDecode } from 'jwt-decode';\r\n\r\nimport { AuthListeners } from '../access-token-provider';\r\n\r\nexport type AccessToken = {\r\n value: string;\r\n exp?: number;\r\n};\r\n\r\ntype DecodedToken = {\r\n exp: number;\r\n sub: string;\r\n};\r\n\r\nexport abstract class AuthStrategy {\r\n private _token: AccessToken | null = null;\r\n private expiringTimer: number | null = null;\r\n private expiredTimer: number | null = null;\r\n private hasEmittedExpiring: boolean = false;\r\n private hasEmittedExpired: boolean = false;\r\n private listeners: AuthListeners = {};\r\n\r\n constructor(\r\n protected readonly expiringBufferMs: number = 120_000 // 2 minutes\r\n ) {}\r\n\r\n init() {\r\n this.onInit();\r\n }\r\n\r\n clear(): Promise<void> {\r\n this.token = null;\r\n return this.onClear();\r\n }\r\n\r\n setListeners(listeners: AuthListeners) {\r\n this.listeners = listeners;\r\n }\r\n\r\n async getIdentifier(): Promise<string> {\r\n const token = await this.getAccessToken(true);\r\n if (!token) throw new Error('Token not set');\r\n const decoded = jwtDecode<DecodedToken>(token);\r\n return decoded.sub;\r\n }\r\n\r\n abstract onInit(): void;\r\n\r\n abstract onClear(): Promise<void>;\r\n\r\n abstract getAccessToken(allowExpired?: boolean): Promise<string>;\r\n\r\n protected set token(value: string | null) {\r\n if (typeof value === 'string') {\r\n this._token = this.getDecodedAccessToken(value);\r\n } else {\r\n this._token = value;\r\n }\r\n\r\n this.hasEmittedExpiring = false;\r\n this.hasEmittedExpired = false;\r\n\r\n this.listeners.onUpdated?.(this._token?.exp ?? null, value);\r\n\r\n this.armTimers();\r\n }\r\n\r\n protected get token(): string | null {\r\n return this._token?.value ?? null;\r\n }\r\n\r\n protected isExpiring(): boolean {\r\n if (!this._token?.exp) throw new Error('Token not set');\r\n return this._token.exp < Date.now() + this.expiringBufferMs;\r\n }\r\n\r\n protected isExpired(): boolean {\r\n if (!this._token?.exp) throw new Error('Token not set');\r\n return this._token.exp < Date.now();\r\n }\r\n\r\n private clearTimers() {\r\n if (this.expiringTimer) {\r\n clearTimeout(this.expiringTimer);\r\n }\r\n if (this.expiredTimer) {\r\n clearTimeout(this.expiredTimer);\r\n }\r\n }\r\n\r\n private armTimers() {\r\n this.clearTimers();\r\n if (!this._token?.exp) return;\r\n\r\n const now = Date.now();\r\n const remainingMs = this._token.exp - now;\r\n if (remainingMs <= 0) return this.emitExpired();\r\n\r\n if (remainingMs <= this.expiringBufferMs && !this.hasEmittedExpiring)\r\n this.emitExpiring(remainingMs);\r\n\r\n if (!this.hasEmittedExpiring) {\r\n this.expiringTimer = window.setTimeout(\r\n () => {\r\n if (this._token?.exp) {\r\n this.emitExpiring(this._token.exp - Date.now());\r\n }\r\n },\r\n Math.max(0, remainingMs - this.expiringBufferMs)\r\n );\r\n }\r\n\r\n this.expiredTimer = window.setTimeout(\r\n () => {\r\n this.emitExpired();\r\n },\r\n Math.max(0, remainingMs)\r\n );\r\n }\r\n\r\n private emitExpiring(remainingMs: number) {\r\n if (this.hasEmittedExpiring || !this._token?.exp) return;\r\n this.hasEmittedExpiring = true;\r\n this.listeners.onExpiring?.(this._token.exp, remainingMs);\r\n }\r\n\r\n private emitExpired() {\r\n if (this.hasEmittedExpired || !this._token?.exp) return;\r\n this.hasEmittedExpired = true;\r\n this.listeners.onExpired?.(this._token.exp);\r\n }\r\n\r\n private getDecodedAccessToken(token: string): AccessToken {\r\n const decoded = jwtDecode<DecodedToken>(token);\r\n return {\r\n value: token,\r\n exp: decoded.exp ? decoded.exp * 1000 : undefined,\r\n };\r\n }\r\n}\r\n","import { ensureBodyJson, ensureOk } from '@/infra/http/guards';\r\nimport type { IStorage } from '@/infra/storage/types';\r\nimport { VisitorTokenStorage } from '@/infra/storage/visitor-token-storage';\r\n\r\nimport { AuthStrategy } from './strategy';\r\n\r\nexport class VisitorTokenStrategy extends AuthStrategy {\r\n constructor(\r\n private readonly baseUrl: string,\r\n private readonly storage: IStorage<string> = new VisitorTokenStorage(),\r\n private readonly fetchImpl: typeof fetch = fetch\r\n ) {\r\n super();\r\n }\r\n\r\n onInit(): void {\r\n this.token = this.storage.load();\r\n }\r\n\r\n async getAccessToken(allowExpired?: boolean): Promise<string> {\r\n if (!this.token) {\r\n const accessToken = await this.requestVisitorToken();\r\n this.storage.save(accessToken);\r\n this.token = accessToken;\r\n return this.token;\r\n }\r\n if (this.isExpiring() && !allowExpired) {\r\n const accessToken = await this.refreshVisitorToken();\r\n this.storage.save(accessToken);\r\n this.token = accessToken;\r\n }\r\n return this.token;\r\n }\r\n\r\n async onClear(): Promise<void> {\r\n this.storage.clear();\r\n }\r\n\r\n private async requestVisitorToken(): Promise<string> {\r\n const res = await (this.fetchImpl ?? fetch)(`${this.baseUrl}/api/v1/auth/visitor`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n ensureOk(res);\r\n const data = await ensureBodyJson<{ accessToken: string }>(res);\r\n return data.accessToken;\r\n }\r\n\r\n private async refreshVisitorToken(): Promise<string> {\r\n return await this.requestVisitorToken();\r\n }\r\n}\r\n","import { AuthStrategy } from './strategy';\r\n\r\nexport class VismaTokenStrategy extends AuthStrategy {\r\n constructor(private readonly initialToken: string | null = null) {\r\n super();\r\n }\r\n\r\n onInit(): void {\r\n this.token = this.initialToken;\r\n }\r\n\r\n async getAccessToken(allowExpired?: boolean): Promise<string> {\r\n if (!this.token) throw new Error('No host token set');\r\n if (this.isExpired() && !allowExpired) {\r\n throw new Error('Host token expired');\r\n }\r\n return this.token;\r\n }\r\n\r\n setToken(token: string | null) {\r\n this.token = token;\r\n }\r\n\r\n async onClear(): Promise<void> {\r\n // nothing to do\r\n }\r\n}\r\n","import { VisitorTokenStrategy } from './strategies/visitor-token-strategy';\r\nimport { VismaTokenStrategy } from './strategies/visma-token-strategy';\r\n\r\nexport function makeStrategy(baseUrl: string, vismaToken?: string) {\r\n if (vismaToken) return { kind: 'visma' as const, strategy: new VismaTokenStrategy(vismaToken) };\r\n return { kind: 'visitor' as const, strategy: new VisitorTokenStrategy(baseUrl) };\r\n}\r\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n/**\n * Name of the event dispatched to `window` whenever a locale change starts,\n * finishes successfully, or fails. Only relevant to runtime mode.\n *\n * The `detail` of this event is an object with a `status` string that can be:\n * \"loading\", \"ready\", or \"error\", along with the relevant locale code, and\n * error message if applicable.\n *\n * You can listen for this event to know when your application should be\n * re-rendered following a locale change. See also the Localized mixin, which\n * automatically re-renders LitElement classes using this event.\n */\nexport const LOCALE_STATUS_EVENT = 'lit-localize-status';\n//# sourceMappingURL=locale-status-event.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n/**\n * Tag that allows expressions to be used in localized non-HTML template\n * strings.\n *\n * Example: msg(str`Hello ${this.user}!`);\n *\n * The Lit html tag can also be used for this purpose, but HTML will need to be\n * escaped, and there is a small overhead for HTML parsing.\n *\n * Untagged template strings with expressions aren't supported by lit-localize\n * because they don't allow for values to be captured at runtime.\n */\nconst _str = (strings, ...values) => ({\n strTag: true,\n strings,\n values,\n});\nexport const str = _str;\nexport const isStrTagged = (val) => typeof val !== 'string' && 'strTag' in val;\n/**\n * Render the result of a `str` tagged template to a string. Note we don't need\n * to do this for Lit templates, since Lit itself handles rendering.\n */\nexport const joinStringsAndValues = (strings, values, valueOrder) => {\n let concat = strings[0];\n for (let i = 1; i < strings.length; i++) {\n concat += values[valueOrder ? valueOrder[i - 1] : i - 1];\n concat += strings[i];\n }\n return concat;\n};\n//# sourceMappingURL=str-tag.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nimport { isStrTagged, joinStringsAndValues } from './str-tag.js';\n/**\n * Default identity msg implementation. Simply returns the input template with\n * no awareness of translations. If the template is str-tagged, returns it in\n * string form.\n */\nexport const defaultMsg = ((template) => isStrTagged(template)\n ? joinStringsAndValues(template.strings, template.values)\n : template);\n//# sourceMappingURL=default-msg.js.map","import { defaultMsg } from '../internal/default-msg.js';\n/**\n * Make a string or lit-html template localizable.\n *\n * @param template A string, a lit-html template, or a function that returns\n * either a string or lit-html template.\n * @param options Optional configuration object with the following properties:\n * - id: Optional project-wide unique identifier for this template. If\n * omitted, an id will be automatically generated from the template strings.\n * - desc: Optional description\n */\nexport let msg = defaultMsg;\nlet installed = false;\n/**\n * Internal only. Do not use this function.\n *\n * Installs an implementation of the msg function to replace the default\n * identity function. Throws if called more than once.\n *\n * @internal\n */\nexport function _installMsgImplementation(impl) {\n if (installed) {\n throw new Error('lit-localize can only be configured once');\n }\n msg = impl;\n installed = true;\n}\n//# sourceMappingURL=install.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nimport { LOCALE_STATUS_EVENT } from './locale-status-event.js';\nclass LocalizeController {\n constructor(host) {\n this.__litLocalizeEventHandler = (event) => {\n if (event.detail.status === 'ready') {\n this.host.requestUpdate();\n }\n };\n this.host = host;\n }\n hostConnected() {\n window.addEventListener(LOCALE_STATUS_EVENT, this.__litLocalizeEventHandler);\n }\n hostDisconnected() {\n window.removeEventListener(LOCALE_STATUS_EVENT, this.__litLocalizeEventHandler);\n }\n}\n/**\n * Re-render the given LitElement whenever a new active locale has loaded.\n *\n * See also {@link localized} for the same functionality as a decorator.\n *\n * When using lit-localize in transform mode, calls to this function are\n * replaced with undefined.\n *\n * Usage:\n *\n * import {LitElement, html} from 'lit';\n * import {msg, updateWhenLocaleChanges} from '@lit/localize';\n *\n * class MyElement extends LitElement {\n * constructor() {\n * super();\n * updateWhenLocaleChanges(this);\n * }\n *\n * render() {\n * return html`<b>${msg('Hello World')}</b>`;\n * }\n * }\n */\nconst _updateWhenLocaleChanges = (host) => host.addController(new LocalizeController(host));\nexport const updateWhenLocaleChanges = _updateWhenLocaleChanges;\n//# sourceMappingURL=localized-controller.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nimport { updateWhenLocaleChanges } from './localized-controller.js';\n/**\n * Class decorator to enable re-rendering the given LitElement whenever a new\n * active locale has loaded.\n *\n * See also {@link updateWhenLocaleChanges} for the same functionality without\n * the use of decorators.\n *\n * When using lit-localize in transform mode, applications of this decorator are\n * removed.\n *\n * Usage:\n *\n * import {LitElement, html} from 'lit';\n * import {customElement} from 'lit/decorators.js';\n * import {msg, localized} from '@lit/localize';\n *\n * @localized()\n * @customElement('my-element')\n * class MyElement extends LitElement {\n * render() {\n * return html`<b>${msg('Hello World')}</b>`;\n * }\n * }\n */\nexport const localized = () => (clazz, _context) => {\n clazz.addInitializer(updateWhenLocaleChanges);\n return clazz;\n};\n//# sourceMappingURL=localized-decorator.js.map","/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nexport class Deferred {\n constructor() {\n this.settled = false;\n this.promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n resolve(value) {\n this.settled = true;\n this._resolve(value);\n }\n reject(error) {\n this.settled = true;\n this._reject(error);\n }\n}\n//# sourceMappingURL=deferred.js.map","/**\n * @license\n * Copyright 2014 Travis Webb\n * SPDX-License-Identifier: MIT\n */\n// This module is derived from the file:\n// https://github.com/tjwebb/fnv-plus/blob/1e2ce68a07cb7dd4c3c85364f3d8d96c95919474/index.js#L309\n//\n// Changes:\n// - Only the _hash64_1a_fast function is included.\n// - Removed loop unrolling.\n// - Converted to TypeScript ES module.\n// - var -> let/const\n//\n// TODO(aomarks) Upstream improvements to https://github.com/tjwebb/fnv-plus/.\nconst hl = [];\nfor (let i = 0; i < 256; i++) {\n hl[i] = ((i >> 4) & 15).toString(16) + (i & 15).toString(16);\n}\n/**\n * Perform a FNV-1A 64-bit hash of the given string (as UTF-16 code units), and\n * return a hexadecimal digest (left zero padded to 16 characters).\n *\n * @see {@link http://tools.ietf.org/html/draft-eastlake-fnv-06}\n */\nexport function fnv1a64(str) {\n let t0 = 0, v0 = 0x2325, t1 = 0, v1 = 0x8422, t2 = 0, v2 = 0x9ce4, t3 = 0, v3 = 0xcbf2;\n for (let i = 0; i < str.length; i++) {\n v0 ^= str.charCodeAt(i);\n t0 = v0 * 435;\n t1 = v1 * 435;\n t2 = v2 * 435;\n t3 = v3 * 435;\n t2 += v0 << 8;\n t3 += v1 << 8;\n t1 += t0 >>> 16;\n v0 = t0 & 65535;\n t2 += t1 >>> 16;\n v1 = t1 & 65535;\n v3 = (t3 + (t2 >>> 16)) & 65535;\n v2 = t2 & 65535;\n }\n return (hl[v3 >> 8] +\n hl[v3 & 255] +\n hl[v2 >> 8] +\n hl[v2 & 255] +\n hl[v1 >> 8] +\n hl[v1 & 255] +\n hl[v0 >> 8] +\n hl[v0 & 255]);\n}\n//# sourceMappingURL=fnv1a64.js.map","/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nimport { fnv1a64 } from './fnv1a64.js';\n/**\n * Delimiter used between each template string component before hashing. Used to\n * prevent e.g. \"foobar\" and \"foo${baz}bar\" from sharing a hash.\n *\n * This is the \"record separator\" ASCII character.\n */\nexport const HASH_DELIMITER = '\\x1e';\n/**\n * Id prefix on html-tagged templates to distinguish e.g. `<b>x</b>` from\n * html`<b>x</b>`.\n */\nconst HTML_PREFIX = 'h';\n/**\n * Id prefix on plain string templates to distinguish e.g. `<b>x</b>` from\n * html`<b>x</b>`.\n */\nconst STRING_PREFIX = 's';\n/**\n * Generate a unique ID for a lit-localize message.\n *\n * Example:\n * Template: html`Hello <b>${who}</b>!`\n * Params: [\"Hello <b>\", \"</b>!\"], true\n * Output: h82ccc38d4d46eaa9\n *\n * The ID is constructed as:\n *\n * [0] Kind of template: [h]tml or [s]tring.\n * [1,16] 64-bit FNV-1a hash hex digest of the template strings, as UTF-16\n * code points, delineated by an ASCII \"record separator\" character.\n *\n * We choose FNV-1a because:\n *\n * 1. It's pretty fast (e.g. much faster than SHA-1).\n * 2. It's pretty small (0.25 KiB minified + brotli).\n * 3. We don't require cryptographic security, and 64 bits should give\n * sufficient collision resistance for any one application. Worst\n * case, we will always detect collisions during analysis.\n * 4. We can't use Web Crypto API (e.g. SHA-1), because it's asynchronous.\n * 5. It's a well known non-cryptographic hash with implementations in many\n * languages.\n * 6. There was an existing JavaScript implementation that doesn't require\n * BigInt, for IE11 compatibility.\n */\nexport function generateMsgId(strings, isHtmlTagged) {\n return ((isHtmlTagged ? HTML_PREFIX : STRING_PREFIX) +\n fnv1a64(typeof strings === 'string' ? strings : strings.join(HASH_DELIMITER)));\n}\n//# sourceMappingURL=id-generation.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nimport { defaultMsg } from './default-msg.js';\nimport { joinStringsAndValues } from './str-tag.js';\nimport { generateMsgId } from './id-generation.js';\nconst expressionOrders = new WeakMap();\nconst hashCache = new Map();\nexport function runtimeMsg(templates, template, options) {\n if (templates) {\n const id = options?.id ?? generateId(template);\n const localized = templates[id];\n if (localized) {\n if (typeof localized === 'string') {\n // E.g. \"Hello World!\"\n return localized;\n }\n else if ('strTag' in localized) {\n // E.g. str`Hello ${name}!`\n //\n // Localized templates have ${number} in place of real template\n // expressions. They can't have real template values, because the\n // variable scope would be wrong. The number tells us the index of the\n // source value to substitute in its place, because expressions can be\n // moved to a different position during translation.\n return joinStringsAndValues(localized.strings, \n // Cast `template` because its type wasn't automatically narrowed (but\n // we know it must be the same type as `localized`).\n template.values, localized.values);\n }\n else {\n // E.g. html`Hello <b>${name}</b>!`\n //\n // We have to keep our own mapping of expression ordering because we do\n // an in-place update of `values`, and otherwise we'd lose ordering for\n // subsequent renders.\n let order = expressionOrders.get(localized);\n if (order === undefined) {\n order = localized.values;\n expressionOrders.set(localized, order);\n }\n return {\n ...localized,\n values: order.map((i) => template.values[i]),\n };\n }\n }\n }\n return defaultMsg(template);\n}\nfunction generateId(template) {\n const strings = typeof template === 'string' ? template : template.strings;\n let id = hashCache.get(strings);\n if (id === undefined) {\n id = generateMsgId(strings, typeof template !== 'string' && !('strTag' in template));\n hashCache.set(strings, id);\n }\n return id;\n}\n//# sourceMappingURL=runtime-msg.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nimport { Deferred } from '../internal/deferred.js';\nimport { LOCALE_STATUS_EVENT } from '../internal/locale-status-event.js';\nimport { runtimeMsg } from '../internal/runtime-msg.js';\nimport { _installMsgImplementation } from './install.js';\n/**\n * Dispatch a \"lit-localize-status\" event to `window` with the given detail.\n */\nfunction dispatchStatusEvent(detail) {\n window.dispatchEvent(new CustomEvent(LOCALE_STATUS_EVENT, { detail }));\n}\nlet activeLocale = '';\nlet loadingLocale;\nlet sourceLocale;\nlet validLocales;\nlet loadLocale;\nlet templates;\nlet loading = new Deferred();\n// The loading promise must be initially resolved, because that's what we should\n// return if the user immediately calls setLocale(sourceLocale).\nloading.resolve();\nlet requestId = 0;\n/**\n * Set configuration parameters for lit-localize when in runtime mode. Returns\n * an object with functions:\n *\n * - `getLocale`: Return the active locale code.\n * - `setLocale`: Set the active locale code.\n *\n * Throws if called more than once.\n */\nexport const configureLocalization = (config) => {\n _installMsgImplementation(((template, options) => runtimeMsg(templates, template, options)));\n activeLocale = sourceLocale = config.sourceLocale;\n validLocales = new Set(config.targetLocales);\n validLocales.add(config.sourceLocale);\n loadLocale = config.loadLocale;\n return { getLocale, setLocale };\n};\n/**\n * Return the active locale code.\n */\nconst getLocale = () => {\n return activeLocale;\n};\n/**\n * Set the active locale code, and begin loading templates for that locale using\n * the `loadLocale` function that was passed to `configureLocalization`. Returns\n * a promise that resolves when the next locale is ready to be rendered.\n *\n * Note that if a second call to `setLocale` is made while the first requested\n * locale is still loading, then the second call takes precedence, and the\n * promise returned from the first call will resolve when second locale is\n * ready. If you need to know whether a particular locale was loaded, check\n * `getLocale` after the promise resolves.\n *\n * Throws if the given locale is not contained by the configured `sourceLocale`\n * or `targetLocales`.\n */\nconst setLocale = (newLocale) => {\n if (newLocale === (loadingLocale ?? activeLocale)) {\n return loading.promise;\n }\n if (!validLocales || !loadLocale) {\n throw new Error('Internal error');\n }\n if (!validLocales.has(newLocale)) {\n throw new Error('Invalid locale code');\n }\n requestId++;\n const thisRequestId = requestId;\n loadingLocale = newLocale;\n if (loading.settled) {\n loading = new Deferred();\n }\n dispatchStatusEvent({ status: 'loading', loadingLocale: newLocale });\n const localePromise = newLocale === sourceLocale\n ? // We could switch to the source locale synchronously, but we prefer to\n // queue it on a microtask so that switching locales is consistently\n // asynchronous.\n Promise.resolve({ templates: undefined })\n : loadLocale(newLocale);\n localePromise.then((mod) => {\n if (requestId === thisRequestId) {\n activeLocale = newLocale;\n loadingLocale = undefined;\n templates = mod.templates;\n dispatchStatusEvent({ status: 'ready', readyLocale: newLocale });\n loading.resolve();\n }\n // Else another locale was requested in the meantime. Don't resolve or\n // reject, because the newer load call is going to use the same promise.\n // Note the user can call getLocale() after the promise resolves if they\n // need to check if the locale is still the one they expected to load.\n }, (err) => {\n if (requestId === thisRequestId) {\n dispatchStatusEvent({\n status: 'error',\n errorLocale: newLocale,\n errorMessage: err.toString(),\n });\n loading.reject(err);\n }\n });\n return loading.promise;\n};\n//# sourceMappingURL=runtime.js.map","import { localized } from '@lit/localize';\r\nimport { adoptStyles, LitElement, unsafeCSS } from 'lit';\r\n\r\nimport cssString from '@/styles/styles.css?inline';\r\n\r\n@localized()\r\nexport class TwElement extends LitElement {\r\n override connectedCallback() {\r\n super.connectedCallback();\r\n if (this.shadowRoot) {\r\n adoptStyles(this.shadowRoot, [unsafeCSS(cssString), ...this.shadowRoot.adoptedStyleSheets]);\r\n }\r\n }\r\n}\r\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-arrow-up-icon lucide-arrow-up\\\"><path d=\\\"m5 12 7-7 7 7\\\"/><path d=\\\"M12 19V5\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-circle-alert-icon lucide-circle-alert\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><line x1=\\\"12\\\" x2=\\\"12\\\" y1=\\\"8\\\" y2=\\\"12\\\"/><line x1=\\\"12\\\" x2=\\\"12.01\\\" y1=\\\"16\\\" y2=\\\"16\\\"/></svg>\"","export class SendMessageCommand extends CustomEvent<{\r\n message: string;\r\n}> {\r\n constructor(message: string) {\r\n super('send-message', {\r\n detail: { message },\r\n composed: true,\r\n });\r\n }\r\n}\r\n\r\nexport class ApproveToolCallCommand extends CustomEvent<{\r\n turnId: string;\r\n messageId: string;\r\n}> {\r\n constructor(turnId: string, messageId: string) {\r\n super('approve-tool-call', {\r\n detail: { turnId, messageId },\r\n composed: true,\r\n });\r\n }\r\n}\r\n\r\nexport class DeclineToolCallCommand extends CustomEvent<{\r\n turnId: string;\r\n messageId: string;\r\n}> {\r\n constructor(turnId: string, messageId: string) {\r\n super('decline-tool-call', {\r\n detail: { turnId, messageId },\r\n composed: true,\r\n });\r\n }\r\n}\r\n\r\nexport class SubmitFeedbackCommand extends CustomEvent<{\r\n target: 'assistant' | 'support';\r\n rating: number;\r\n comment: string | null;\r\n}> {\r\n constructor(target: 'assistant' | 'support', rating: number, comment: string | null) {\r\n super('submit-feedback', { detail: { target, rating, comment }, composed: true });\r\n }\r\n}\r\n\r\nexport class ToggleFeedbackFormCommand extends CustomEvent<{\r\n target: 'assistant' | 'support' | null;\r\n}> {\r\n constructor(target: 'assistant' | 'support' | null) {\r\n super('toggle-feedback-form', { detail: { target }, composed: true });\r\n }\r\n}\r\n\r\nexport class ClearConversationCommand extends CustomEvent<void> {\r\n constructor() {\r\n super('clear-conversation', { composed: true });\r\n }\r\n}\r\n\r\nexport class ClearErrorCommand extends CustomEvent<void> {\r\n constructor() {\r\n super('clear-error', { composed: true });\r\n }\r\n}\r\n\r\nexport class SendTypingCommand extends CustomEvent<void> {\r\n constructor() {\r\n super('send-typing', { composed: true });\r\n }\r\n}\r\n\r\nexport class MarkSeenCommand extends CustomEvent<{\r\n messageId: string;\r\n seenAt: string;\r\n}> {\r\n constructor(messageId: string, seenAt: string) {\r\n super('mark-seen', { detail: { messageId, seenAt }, composed: true });\r\n }\r\n}\r\n\r\nexport class CloseChatCommand extends CustomEvent<void> {\r\n constructor() {\r\n super('close-chat', { composed: true });\r\n }\r\n}\r\n","import { msg } from '@lit/localize';\r\nimport { html, nothing } from 'lit';\r\nimport { customElement, property, query, state } from 'lit/decorators.js';\r\nimport { live } from 'lit/directives/live.js';\r\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\r\n\r\nimport arrowUpSvg from '@/assets/icons/arrow-up.svg?raw';\r\nimport circleAlertSvg from '@/assets/icons/circle-alert.svg?raw';\r\nimport { SendMessageCommand, SendTypingCommand } from '@/core/events/internal/commands';\r\n\r\nimport { TwElement } from './base-tw-element';\r\n\r\n@customElement('gaia-chat-composer')\r\nexport class Composer extends TwElement {\r\n private readonly maxHeightPx: number = 192;\r\n private readonly typingThrottleMs = 2000;\r\n private lastTypingSent = 0;\r\n\r\n @property({ type: Number, attribute: 'max-input-length' })\r\n maxInputLength: number = 100;\r\n\r\n @property({ attribute: false })\r\n disabled: boolean = false;\r\n\r\n @property({ attribute: false })\r\n loading: boolean = false;\r\n\r\n @state()\r\n private text: string = '';\r\n\r\n @state()\r\n private error: string = '';\r\n\r\n @query('textarea[name=\"composer-textarea\"]')\r\n private textarea!: HTMLTextAreaElement;\r\n\r\n private get canSubmit() {\r\n return this.text.trim() !== '' && !this.loading && !this.hasError && !this.disabled;\r\n }\r\n\r\n private get hasError() {\r\n return this.error.length > 0;\r\n }\r\n\r\n private validateInput() {\r\n if (this.text.length > this.maxInputLength) {\r\n this.error = msg('Character limit exceeded.', { id: 'composer-error-character-limit' });\r\n } else {\r\n this.error = '';\r\n }\r\n }\r\n\r\n private sendMessage() {\r\n if (!this.canSubmit) return;\r\n this.dispatchEvent(new SendMessageCommand(this.text));\r\n this.text = '';\r\n this.textarea.style.height = 'auto';\r\n }\r\n\r\n private onKeyDown(e: KeyboardEvent) {\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n this.sendMessage();\r\n }\r\n }\r\n\r\n private onInput() {\r\n this.text = this.textarea.value;\r\n\r\n this.maybeEmitTyping();\r\n\r\n this.textarea.style.height = 'auto'; // reset height\r\n this.textarea.style.height = Math.min(this.textarea.scrollHeight, this.maxHeightPx) + 'px';\r\n this.textarea.style.overflowY =\r\n this.textarea.scrollHeight > this.maxHeightPx ? 'auto' : 'hidden';\r\n this.validateInput();\r\n }\r\n\r\n private maybeEmitTyping() {\r\n if (this.disabled) return;\r\n const now = Date.now();\r\n if (now - this.lastTypingSent >= this.typingThrottleMs) {\r\n this.dispatchEvent(new SendTypingCommand());\r\n this.lastTypingSent = now;\r\n }\r\n }\r\n\r\n override render() {\r\n return html` <div class=\"group/composer w-full p-4 max-w-2xl mx-auto\" data-error=${this.hasError}>\r\n <div\r\n class=\"outline-primary-800 rounded-sm outline-none border border-solid border-neutral-600 px-2 outline-2 group-focus-within/composer:outline-solid group-data-[error=true]/composer:border-red-600 group-data-[error=true]/composer:bg-red-100 group-data-[error=true]/composer:outline-red-600\"\r\n >\r\n <div\r\n class=\"grid grid-cols-[auto_1fr_auto] [grid-template-areas:'header_header_header'_'leading_primary_trailing'_'._footer_.'] group-data-expanded/composer:[grid-template-areas:'header_header_header'_'primary_primary_primary'_'leading_footer_trailing']\"\r\n >\r\n <div class=\"flex items-center overflow-x-hidden px-1.5 py-2 [grid-area:primary]\">\r\n <textarea style=${`max-height: ${this.maxHeightPx}px`}\r\n name=\"composer-textarea\"\r\n class=\"text-primary-900 placeholder:text-utility-gray h-[18.4px] w-full resize-none overflow-hidden text-sm outline-none\"\r\n spellcheck=\"false\"\r\n @keydown=${this.onKeyDown}\r\n @input=${this.onInput}\r\n .disabled=${this.disabled}\r\n .value=${live(this.text)}\r\n rows=\"1\"\r\n placeholder=${msg('Type your question here...', { id: 'composer-placeholder' })}\r\n ></textarea>\r\n </div>\r\n <div class=\"flex items-center [grid-area:leading]\"></div>\r\n <div class=\"flex items-end py-2 [grid-area:trailing]\">\r\n <span class=\"flex\">\r\n <button\r\n data-test-id=\"send-message-button\"\r\n aria-label=\"Send message\"\r\n class=\"btn btn-primary size-8 data-[loading=true]:bg-transparent\"\r\n @click=${this.sendMessage}\r\n ?disabled=${!this.canSubmit}\r\n data-loading=${this.loading}\r\n >\r\n <div class=\"flex items-center justify-center\">\r\n ${\r\n this.loading\r\n ? html`\r\n <div class=\"relative size-4\">\r\n <div\r\n class=\"bg-secondary-200 absolute inset-0 rounded-full [-webkit-mask:radial-gradient(farthest-side,transparent_calc(100%-3px),#000_0)] [mask:radial-gradient(farthest-side,transparent_calc(100%-3px),#000_0)]\"\r\n ></div>\r\n <div\r\n class=\"[background:conic-gradient(theme(colors.primary-600)_0_30%,transparent_30%_100%)] absolute inset-0 animate-spin rounded-full [-webkit-mask:radial-gradient(farthest-side,transparent_calc(100%-3px),#000_0)] [mask:radial-gradient(farthest-side,transparent_calc(100%-3px),#000_0)]\"\r\n ></div>\r\n </div>\r\n `\r\n : html`<div class=\"flex size-5 items-center justify-center\">\r\n ${unsafeSVG(arrowUpSvg)}\r\n </div>`\r\n }\r\n </div>\r\n </button>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"relative flex h-6 w-full items-center justify-between gap-x-2\">\r\n <div class=\"flex max-w-[calc(100%-80px)] flex-row items-center gap-x-2 overflow-x-clip\">\r\n ${\r\n this.hasError\r\n ? html`\r\n <div class=\"flex size-4 items-center justify-center text-red-600\">\r\n ${unsafeSVG(circleAlertSvg)}\r\n </div>\r\n <span class=\"text-primary-900 truncate text-xs\">${this.error}</span>\r\n `\r\n : nothing\r\n }\r\n </div>\r\n <div class=\"flex flex-col items-end\">\r\n <span class=\"text-primary-900 text-xs font-medium\">\r\n ${this.text.length}/${this.maxInputLength}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>`;\r\n }\r\n}\r\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-megaphone-icon lucide-megaphone\\\"><path d=\\\"M11 6a13 13 0 0 0 8.4-2.8A1 1 0 0 1 21 4v12a1 1 0 0 1-1.6.8A13 13 0 0 0 11 14H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z\\\"/><path d=\\\"M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14\\\"/><path d=\\\"M8 6v8\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-minimize2-icon lucide-minimize-2\\\"><path d=\\\"m14 10 7-7\\\"/><path d=\\\"M20 10h-6V4\\\"/><path d=\\\"m3 21 7-7\\\"/><path d=\\\"M4 14h6v6\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-square-pen-icon lucide-square-pen\\\"><path d=\\\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\\\"/><path d=\\\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\\\"/></svg>\"","import { html, nothing } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\r\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\r\n\r\nimport megaphoneSvg from '@/assets/icons/megaphone.svg?raw';\r\nimport minimize2Svg from '@/assets/icons/minimize-2.svg?raw';\r\nimport squarePenSvg from '@/assets/icons/square-pen.svg?raw';\r\nimport {\r\n ClearConversationCommand,\r\n CloseChatCommand,\r\n ToggleFeedbackFormCommand,\r\n} from '@/core/events/internal/commands';\r\n\r\nimport { TwElement } from './base-tw-element';\r\n\r\n@customElement('gaia-chat-menu')\r\nexport class Menu extends TwElement {\r\n @property({ attribute: false })\r\n hasEmptyMessages: boolean = true;\r\n\r\n @property({ attribute: false })\r\n disabled: boolean = false;\r\n\r\n @property({ attribute: false })\r\n closeable: boolean = true;\r\n\r\n private clearConversation() {\r\n this.dispatchEvent(new ClearConversationCommand());\r\n }\r\n\r\n private openFeedbackForm() {\r\n this.dispatchEvent(new ToggleFeedbackFormCommand('assistant'));\r\n }\r\n\r\n private closeChat() {\r\n this.dispatchEvent(new CloseChatCommand());\r\n }\r\n\r\n override render() {\r\n return html` <div class=\"relative w-full border-b border-solid border-neutral-300 p-4\">\r\n <div class=\"flex items-center justify-between\">\r\n <div class=\"flex\">\r\n <h2 class=\"text-primary-900 text-sm font-bold\">GAiA</h2>\r\n </div>\r\n <div class=\"flex items-center gap-0\">\r\n <button\r\n class=\"btn btn-ghost p-1\"\r\n @click=${this.openFeedbackForm}\r\n ?disabled=${this.hasEmptyMessages || this.disabled}\r\n >\r\n <div class=\"flex size-4 items-center justify-center\">${unsafeHTML(megaphoneSvg)}</div>\r\n </button>\r\n <button\r\n class=\"btn btn-ghost p-1\"\r\n @click=${this.clearConversation}\r\n ?disabled=${this.hasEmptyMessages || this.disabled}\r\n >\r\n <div class=\"flex size-4 items-center justify-center\">${unsafeSVG(squarePenSvg)}</div>\r\n </button>\r\n ${this.closeable\r\n ? html`\r\n <button class=\"btn btn-ghost p-1\" @click=${this.closeChat}>\r\n <div class=\"flex size-4 items-center justify-center\">\r\n ${unsafeSVG(minimize2Svg)}\r\n </div>\r\n </button>\r\n `\r\n : nothing}\r\n </div>\r\n </div>\r\n </div>`;\r\n }\r\n}\r\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-x-icon lucide-x\\\"><path d=\\\"M18 6 6 18\\\"/><path d=\\\"m6 6 12 12\\\"/></svg>\"","import { html, nothing } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\r\n\r\nimport circleAlertSvg from '@/assets/icons/circle-alert.svg?raw';\r\nimport xSvg from '@/assets/icons/x.svg?raw';\r\nimport { AppError } from '@/core/errors/app-error';\r\nimport { ClearErrorCommand } from '@/core/events/internal/commands';\r\n\r\nimport { TwElement } from './base-tw-element';\r\n\r\n@customElement('gaia-chat-error')\r\nexport class ErrorMessage extends TwElement {\r\n @property({ attribute: false })\r\n error?: AppError;\r\n\r\n private clearError() {\r\n this.dispatchEvent(new ClearErrorCommand());\r\n }\r\n\r\n override render() {\r\n if (!this.error) return nothing;\r\n\r\n return html` <div\r\n role=\"alert\"\r\n aria-live=\"assertive\"\r\n class=\"absolute bottom-0 left-1/2 z-50 flex w-full items-center justify-center\"\r\n style=\"transform: translateX(-50%) translateY(16px)\"\r\n >\r\n <div\r\n class=\"m-4 grid grid-cols-[auto_1fr_auto] gap-2 rounded-sm border border-solid border-red-600 bg-red-100 p-4 [grid-template-areas:'leading_primary_trailing']\"\r\n >\r\n <div class=\"flex [grid-area:primary]\">\r\n <p class=\"text-primary-900 text-sm\">${this.error.message}</p>\r\n </div>\r\n <div class=\"flex [grid-area:leading]\">\r\n <div class=\"flex size-5 items-center justify-center text-red-600\">\r\n ${unsafeSVG(circleAlertSvg)}\r\n </div>\r\n </div>\r\n <div class=\"flex [grid-area:trailing]\">\r\n <button class=\"btn self-start\" @click=${this.clearError}>\r\n <div class=\"text-primary-900 flex size-5 items-center justify-center\">\r\n ${unsafeSVG(xSvg)}\r\n </div>\r\n </button>\r\n </div>\r\n </div>\r\n </div>`;\r\n }\r\n}\r\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-send-icon lucide-send\\\"><path d=\\\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\\\"/><path d=\\\"m21.854 2.147-10.94 10.939\\\"/></svg>\"","import { msg } from '@lit/localize';\r\nimport { html } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { map } from 'lit/directives/map.js';\r\nimport { createRef, ref } from 'lit/directives/ref.js';\r\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\r\n\r\nimport sendSvg from '@/assets/icons/send.svg?raw';\r\nimport {\r\n ClearConversationCommand,\r\n SubmitFeedbackCommand,\r\n ToggleFeedbackFormCommand,\r\n} from '@/core/events/internal/commands';\r\nimport { ChatChannel } from '@/core/types';\r\n\r\nimport { TwElement } from './base-tw-element';\r\n\r\n@customElement('gaia-chat-feedback-form')\r\nexport class FeedbackForm extends TwElement {\r\n private readonly ratings = [1, 2, 3, 4, 5];\r\n\r\n @property({ type: String, attribute: 'target' })\r\n target: ChatChannel = 'assistant';\r\n\r\n private textareaRef = createRef<HTMLTextAreaElement>();\r\n\r\n @state()\r\n private selectedRating: number = 0;\r\n\r\n private onRatingClick(value: number) {\r\n this.selectedRating = value;\r\n }\r\n\r\n private get isValid() {\r\n return this.selectedRating > 0 && this.selectedRating <= 5;\r\n }\r\n\r\n private onSubmit = () => {\r\n const comment = this.textareaRef.value?.value ?? null;\r\n if (this.isValid) {\r\n this.dispatchEvent(new SubmitFeedbackCommand(this.target, this.selectedRating, comment));\r\n if (this.target === 'support') {\r\n this.dispatchEvent(new ClearConversationCommand());\r\n }\r\n }\r\n };\r\n\r\n private onCancel = () => {\r\n this.dispatchEvent(new ToggleFeedbackFormCommand(null));\r\n };\r\n\r\n override render() {\r\n return html` <div class=\"relative w-full px-2 py-3\">\r\n <div\r\n class=\"text-primary-900 flex flex-col gap-y-4 rounded-sm border border-solid border-neutral-600 p-4\"\r\n >\r\n <div>\r\n <h4 class=\"pb-2 text-sm font-bold\">${msg('Feedback', { id: 'feedback-form-title' })}</h4>\r\n <p class=\"text-xs\">\r\n ${msg('Please share your thoughts and suggestions to help us improve.', {\r\n id: 'feedback-form-description',\r\n })}\r\n </p>\r\n </div>\r\n <div>\r\n <h4 class=\"pb-2 text-sm font-medium\">\r\n ${this.target === 'support'\r\n ? msg('How satisfied are you with the help you received?', {\r\n id: 'feedback-form-satisfaction-title--support',\r\n })\r\n : msg('How satisfied are you with the assistant?', {\r\n id: 'feedback-form-satisfaction-title--assistant',\r\n })}\r\n </h4>\r\n <div class=\"flex items-center gap-x-2\">\r\n ${map(\r\n this.ratings,\r\n (value) => html`\r\n <button\r\n class=\"btn btn-secondary data-[selected=true]:text-primary-900 data-[selected=true]:bg-secondary-200 size-8\"\r\n @click=${() => this.onRatingClick(value)}\r\n data-selected=${this.selectedRating === value}\r\n >\r\n <div class=\"flex items-center justify-center\">${value}</div>\r\n </button>\r\n `\r\n )}\r\n </div>\r\n </div>\r\n <div>\r\n <h4 class=\"pb-2 text-sm font-medium\">\r\n ${msg('Any additional comments?', { id: 'feedback-form-comments-title' })}\r\n </h4>\r\n <textarea\r\n ${ref(this.textareaRef)}\r\n name=\"feedback-comment\"\r\n class=\"text-primary-900 placeholder:text-utility-gray outline-primary-800 h-24 w-full resize-none rounded-sm border border-solid border-neutral-600 p-2 text-sm active:outline-2\"\r\n spellcheck=\"false\"\r\n placeholder=${msg('Enter your comment here', {\r\n id: 'feedback-form-comment-placeholder',\r\n })}\r\n ></textarea>\r\n </div>\r\n <div class=\"flex items-center justify-end gap-x-2\">\r\n <button\r\n class=\"btn btn-primary px-4 py-2\"\r\n ?disabled=${!this.isValid}\r\n @click=${this.onSubmit}\r\n >\r\n <div class=\"flex items-center justify-center gap-x-2\">\r\n <div class=\"flex size-4 items-center justify-center\">${unsafeSVG(sendSvg)}</div>\r\n ${msg('Submit feedback', { id: 'feedback-form-submit' })}\r\n </div>\r\n </button>\r\n <button class=\"btn btn-secondary px-4 py-2\" @click=${this.onCancel}>\r\n <div class=\"flex items-center justify-center\">\r\n ${msg('Cancel', { id: 'feedback-form-cancel' })}\r\n </div>\r\n </button>\r\n </div>\r\n </div>\r\n </div>`;\r\n }\r\n}\r\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-check-icon lucide-check\\\"><path d=\\\"M20 6 9 17l-5-5\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-chevron-down-icon lucide-chevron-down\\\"><path d=\\\"m6 9 6 6 6-6\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-circle-x-icon lucide-circle-x\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m15 9-6 6\\\"/><path d=\\\"m9 9 6 6\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-file-icon lucide-file\\\"><path d=\\\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\\\"/><path d=\\\"M14 2v4a2 2 0 0 0 2 2h4\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-sparkles-icon lucide-sparkles\\\"><path d=\\\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\\\"/><path d=\\\"M20 2v4\\\"/><path d=\\\"M22 4h-4\\\"/><circle cx=\\\"4\\\" cy=\\\"20\\\" r=\\\"2\\\"/></svg>\"","/*! @license DOMPurify 3.2.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.6/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\nif (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.2.6';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","/**\n * marked v16.2.0 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var O=L();function H(l){O=l}var E={exec:()=>null};function h(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},xe=/^(?:[ \\t]*(?:\\n|$))+/,be=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,C=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Oe=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,j=/(?:[*+-]|\\d{1,9}[.)])/,se=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,ie=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Te=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),F=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,we=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/,ye=h(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Pe=h(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,j).getRegex(),v=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Se=h(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),oe=h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),$e=h(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",oe).getRegex(),K={blockquote:$e,code:be,def:ye,fences:Re,heading:Oe,hr:C,html:Se,lheading:ie,list:Pe,newline:xe,paragraph:oe,table:E,text:we},re=h(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),_e={...K,lheading:Te,table:re,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},Le={...K,html:h(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",ie).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Me=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,ze=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,ae=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,W=/[\\s\\p{P}\\p{S}]/u,le=/[^\\s\\p{P}\\p{S}]/u,Ee=h(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,W).getRegex(),ue=/(?!~)[\\p{P}\\p{S}]/u,Ce=/(?!~)[\\s\\p{P}\\p{S}]/u,Ie=/(?:[^\\s\\p{P}\\p{S}]|~)/u,Be=/\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<(?! )[^<>]*?>/g,pe=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,qe=h(pe,\"u\").replace(/punct/g,D).getRegex(),ve=h(pe,\"u\").replace(/punct/g,ue).getRegex(),ce=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",De=h(ce,\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ze=h(ce,\"gu\").replace(/notPunctSpace/g,Ie).replace(/punctSpace/g,Ce).replace(/punct/g,ue).getRegex(),Ge=h(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),He=h(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),Ne=h(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),je=h(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Fe=h(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",je).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/,Qe=h(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),he=h(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),de=h(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),Ue=h(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",he).replace(\"nolink\",de).getRegex(),X={_backpedal:E,anyPunctuation:He,autolink:Ne,blockSkip:Be,br:ae,code:ze,del:E,emStrongLDelim:qe,emStrongRDelimAst:De,emStrongRDelimUnd:Ge,escape:Me,link:Qe,nolink:de,punctuation:Ee,reflink:he,reflinkSearch:Ue,tag:Fe,text:Ae,url:E},Ke={...X,link:h(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:h(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:Ze,emStrongLDelim:ve,url:h(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\"i\").replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/},We={...N,br:h(ae).replace(\"{2,}\",\"*\").getRegex(),text:h(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},I={normal:K,gfm:_e,pedantic:Le},M={normal:X,gfm:N,breaks:We,pedantic:Ke};var Xe={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"},ke=l=>Xe[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ke)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ke);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,o)=>{let a=!1,u=s;for(;--u>=0&&o[u]===\"\\\\\";)a=!a;return a?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(l,e,t){let n=l.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=l.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return l.slice(0,n-r)}function ge(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===\"\\\\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(l,e,t,n,r){let i=e.href,s=e.title||null,o=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let a={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,a}function Je(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[o]=s;return o.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||O}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Je(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let o=!1,a=[],u;for(u=0;u<n.length;u++)if(this.rules.other.blockquoteStart.test(n[u]))a.push(n[u]),o=!0;else if(!o)a.push(n[u]);else break;n=n.slice(u);let p=a.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=f,n.length===0)break;let k=s.at(-1);if(k?.type===\"code\")break;if(k?.type===\"blockquote\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.blockquote(g);s[s.length-1]=T,r=r.substring(0,r.length-x.raw.length)+T.raw,i=i.substring(0,i.length-x.text.length)+T.text;break}else if(k?.type===\"list\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.list(g);s[s.length-1]=T,r=r.substring(0,r.length-k.raw.length)+T.raw,i=i.substring(0,i.length-x.raw.length)+T.raw,n=g.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),o=!1;for(;e;){let u=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let f=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,Z=>\" \".repeat(3*Z.length)),k=e.split(`\n`,1)[0],x=!f.trim(),g=0;if(this.options.pedantic?(g=2,c=f.trimStart()):x?g=t[1].length+1:(g=t[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,c=f.slice(g),g+=t[1].length),x&&this.rules.other.blankLine.test(k)&&(p+=k+`\n`,e=e.substring(k.length+1),u=!0),!u){let Z=this.rules.other.nextBulletRegex(g),ee=this.rules.other.hrRegex(g),te=this.rules.other.fencesBeginRegex(g),ne=this.rules.other.headingBeginRegex(g),me=this.rules.other.htmlBeginRegex(g);for(;e;){let G=e.split(`\n`,1)[0],A;if(k=G,this.options.pedantic?(k=k.replace(this.rules.other.listReplaceNesting,\" \"),A=k):A=k.replace(this.rules.other.tabCharGlobal,\" \"),te.test(k)||ne.test(k)||me.test(k)||Z.test(k)||ee.test(k))break;if(A.search(this.rules.other.nonSpaceChar)>=g||!k.trim())c+=`\n`+A.slice(g);else{if(x||f.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||te.test(f)||ne.test(f)||ee.test(f))break;c+=`\n`+k}!x&&!k.trim()&&(x=!0),p+=G+`\n`,e=e.substring(G.length+1),f=A.slice(g)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(o=!0));let T=null,Y;this.options.gfm&&(T=this.rules.other.listIsTask.exec(c),T&&(Y=T[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:p,task:!!T,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=p}let a=i.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let u=0;u<i.items.length;u++)if(this.lexer.state.top=!1,i.items[u].tokens=this.lexer.blockTokens(i.items[u].text,[]),!i.loose){let p=i.items[u].tokens.filter(f=>f.type===\"space\"),c=p.length>0&&p.some(f=>this.rules.other.anyLine.test(f.raw));i.loose=c}if(i.loose)for(let u=0;u<i.items.length;u++)i.items[u].loose=!0;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let o of r)this.rules.other.tableAlignRight.test(o)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(o)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(o)?s.align.push(\"left\"):s.align.push(null);for(let o=0;o<n.length;o++)s.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:s.align[o]});for(let o of i)s.rows.push(V(o,s.header.length).map((a,u)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:s.align[u]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=ge(t[2],\"()\");if(s===-2)return;if(s>-1){let a=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,a).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),fe(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return fe(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,o,a,u=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(a=[...o].length,r[3]||r[4]){u+=a;continue}else if((r[5]||r[6])&&s%3&&!((s+a)%3)){p+=a;continue}if(u-=a,u>0)continue;a=Math.min(a,a+u+p);let f=[...r[0]][0].length,k=e.slice(0,s+r.index+f+a);if(Math.min(s,a)%2){let g=k.slice(1,-1);return{type:\"em\",raw:k,text:g,tokens:this.lexer.inlineTokens(g)}}let x=k.slice(2,-2);return{type:\"strong\",raw:k,text:x,tokens:this.lexer.inlineTokens(x)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var b=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||O,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:I.normal,inline:M.normal};this.options.pedantic?(t.block=I.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=I.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:I,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\" \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,o=e.slice(1),a;this.options.extensions.startBlock.forEach(u=>{a=u.call({lexer:this},o),typeof a==\"number\"&&a>=0&&(s=Math.min(s,a))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let i=!1,s=\"\";for(;e;){i||(s=\"\"),i=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,s)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let a=e;if(this.options.extensions?.startInline){let u=1/0,p=e.slice(1),c;this.options.extensions.startInline.forEach(f=>{c=f.call({lexer:this},p),typeof c==\"number\"&&c>=0&&(u=Math.min(u,c))}),u<1/0&&u>=0&&(a=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(a)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(s=o.raw.slice(-1)),i=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||O}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let o=0;o<e.items.length;o++){let a=e.items[o];r+=this.listitem(a)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let o=0;o<s.length;o++)n+=this.tablecell(s[o]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var S=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var R=class l{options;renderer;textRenderer;constructor(e){this.options=e||O,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new S}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=i,a=this.options.extensions.renderers[o.type].call({parser:this},o);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(o.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"space\":{n+=this.renderer.space(s);continue}case\"hr\":{n+=this.renderer.hr(s);continue}case\"heading\":{n+=this.renderer.heading(s);continue}case\"code\":{n+=this.renderer.code(s);continue}case\"table\":{n+=this.renderer.table(s);continue}case\"blockquote\":{n+=this.renderer.blockquote(s);continue}case\"list\":{n+=this.renderer.list(s);continue}case\"html\":{n+=this.renderer.html(s);continue}case\"def\":{n+=this.renderer.def(s);continue}case\"paragraph\":{n+=this.renderer.paragraph(s);continue}case\"text\":{let o=s,a=this.renderer.text(o);for(;r+1<e.length&&e[r+1].type===\"text\";)o=e[++r],a+=`\n`+this.renderer.text(o);t?n+=this.renderer.paragraph({type:\"paragraph\",raw:a,text:a,tokens:[{type:\"text\",raw:a,text:a,escaped:!0}]}):n+=a;continue}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=o||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}};var $=class{options;block;constructor(e){this.options=e||O}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}provideLexer(){return this.block?b.lex:b.lexInline}provideParser(){return this.block?R.parse:R.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=R;Renderer=P;TextRenderer=S;Lexer=b;Tokenizer=y;Hooks=$;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let o of s)n=n.concat(this.walkTokens(o.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let o=i[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...o){let a=i.renderer.apply(this,o);return a===!1&&(a=s.apply(this,o)),a}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let o=s,a=n.renderer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let o=s,a=n.tokenizer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new $;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let o=s,a=n.hooks[o],u=i[o];$.passThroughHooks.has(s)?i[o]=p=>{if(this.defaults.async)return Promise.resolve(a.call(i,p)).then(f=>u.call(i,f));let c=a.call(i,p);return u.call(i,c)}:i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(o){let a=[];return a.push(s.call(this,o)),i&&(a=a.concat(i.call(this,o))),a}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return b.lex(e,t??this.defaults)}parser(e,t){return R.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},o=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return o(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return o(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let a=s.hooks?s.hooks.provideLexer():e?b.lex:b.lexInline,u=s.hooks?s.hooks.provideParser():e?R.parse:R.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(p=>a(p,s)).then(p=>s.hooks?s.hooks.processAllTokens(p):p).then(p=>s.walkTokens?Promise.all(this.walkTokens(p,s.walkTokens)).then(()=>p):p).then(p=>u(p,s)).then(p=>s.hooks?s.hooks.postprocess(p):p).catch(o);try{s.hooks&&(n=s.hooks.preprocess(n));let p=a(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=u(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(p){return o(p)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function d(l,e){return _.parse(l,e)}d.options=d.setOptions=function(l){return _.setOptions(l),d.defaults=_.defaults,H(d.defaults),d};d.getDefaults=L;d.defaults=O;d.use=function(...l){return _.use(...l),d.defaults=_.defaults,H(d.defaults),d};d.walkTokens=function(l,e){return _.walkTokens(l,e)};d.parseInline=_.parseInline;d.Parser=R;d.parser=R.parse;d.Renderer=P;d.TextRenderer=S;d.Lexer=b;d.lexer=b.lex;d.Tokenizer=y;d.Hooks=$;d.parse=d;var Dt=d.options,Zt=d.setOptions,Gt=d.use,Ht=d.walkTokens,Nt=d.parseInline,jt=d,Ft=R.parse,Qt=b.lex;export{$ as Hooks,b as Lexer,B as Marked,R as Parser,P as Renderer,S as TextRenderer,y as Tokenizer,O as defaults,L as getDefaults,Qt as lexer,d as marked,Dt as options,jt as parse,Nt as parseInline,Ft as parser,Zt as setOptions,Gt as use,Ht as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","import DOMPurify from 'dompurify';\r\nimport { marked } from 'marked';\r\n\r\nconst renderer = new marked.Renderer();\r\nconst wrap = (html: string) =>\r\n `<div class=\"overflow-x-auto\"><div class=\"flex w-fit flex-col-reverse mr-4\">${html}</div></div>`;\r\n\r\nrenderer.code = (data) => wrap(marked.Renderer.prototype.code!.call(renderer, data) as string);\r\nrenderer.table = (data) => wrap(marked.Renderer.prototype.table!.call(renderer, data) as string);\r\nrenderer.link = (data) =>\r\n `<a href=\"${data.href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\r\n\r\nmarked.setOptions({ gfm: true, breaks: false, renderer });\r\n\r\nlet hookInstalled = false;\r\nif (!hookInstalled) {\r\n DOMPurify.addHook('afterSanitizeAttributes', (node) => {\r\n if (node.tagName === 'A') {\r\n node.setAttribute('target', '_blank');\r\n node.setAttribute('rel', 'noopener noreferrer');\r\n }\r\n });\r\n hookInstalled = true;\r\n}\r\n\r\nexport function renderMarkdown(md: string) {\r\n const raw = marked.parse(md, { async: false }) as string;\r\n return DOMPurify.sanitize(raw, { USE_PROFILES: { html: true } });\r\n}\r\n","import classNames from 'classnames';\r\nimport { html, nothing } from 'lit';\r\nimport { property } from 'lit/decorators.js';\r\n\r\nimport { TwElement } from '@/components/base-tw-element';\r\nimport type { UiMessage } from '@/core/types';\r\n\r\nexport class BaseMessage<T extends UiMessage> extends TwElement {\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n this.setAttribute('role', 'message');\r\n }\r\n\r\n protected readonly position: 'left' | 'right' | 'center' = 'left';\r\n\r\n @property({ attribute: false })\r\n message!: T;\r\n\r\n protected isHidden(): boolean {\r\n return false;\r\n }\r\n\r\n protected renderHeader(): unknown {\r\n return nothing;\r\n }\r\n\r\n protected renderBody(): unknown {\r\n return nothing;\r\n }\r\n\r\n protected renderFooter(): unknown {\r\n return nothing;\r\n }\r\n\r\n override render() {\r\n if (this.isHidden()) return nothing;\r\n\r\n return html`<div class=\"relative w-full py-3 text-sm\">\r\n <div class=\"group/message mx-auto my-auto px-3\">\r\n <div class=\"flex max-w-full min-w-0 flex-grow-1 flex-col\">\r\n <div\r\n class=${classNames('relative flex flex-col empty:hidden', {\r\n 'items-end': this.position === 'right',\r\n 'items-start': this.position === 'left',\r\n 'items-center': this.position === 'center',\r\n })}\r\n >\r\n ${this.renderHeader()}\r\n </div>\r\n <div\r\n class=\"relative flex min-h-8 w-full flex-col items-end gap-2 text-start break-words whitespace-normal\"\r\n >\r\n <div\r\n class=${classNames('flex w-full flex-col gap-1 empty:hidden text-message', {\r\n 'items-end': this.position === 'right',\r\n 'items-start': this.position === 'left',\r\n 'items-center': this.position === 'center',\r\n })}\r\n >\r\n ${this.renderBody()}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=${classNames('flex justify-start empty:hidden', {\r\n 'justify-end': this.position === 'right',\r\n 'justify-start': this.position === 'left',\r\n 'justify-center': this.position === 'center',\r\n })}\r\n >\r\n ${this.renderFooter()}\r\n </div>\r\n </div>\r\n </div>`;\r\n }\r\n}\r\n","import { msg, str } from '@lit/localize';\r\nimport classNames from 'classnames';\r\nimport { html, nothing } from 'lit';\r\nimport { customElement, state } from 'lit/decorators.js';\r\nimport { guard } from 'lit/directives/guard.js';\r\nimport { repeat } from 'lit/directives/repeat.js';\r\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\r\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\r\n\r\nimport checkSvg from '@/assets/icons/check.svg?raw';\r\nimport chevronDownSvg from '@/assets/icons/chevron-down.svg?raw';\r\nimport circleXSvg from '@/assets/icons/circle-x.svg?raw';\r\nimport fileSvg from '@/assets/icons/file.svg?raw';\r\nimport sparklesSvg from '@/assets/icons/sparkles.svg?raw';\r\nimport { renderMarkdown } from '@/components/shared/markdown';\r\nimport { ApproveToolCallCommand, DeclineToolCallCommand } from '@/core/events/internal/commands';\r\nimport type { AssistantMessage as AssistantMessageType } from '@/core/types';\r\n\r\nimport { BaseMessage } from './base';\r\n\r\n@customElement('gaia-chat-assistant-message')\r\nexport class AssistantMessage extends BaseMessage<AssistantMessageType> {\r\n @state()\r\n private citationsExpanded = false;\r\n\r\n private toggleCitations() {\r\n this.citationsExpanded = !this.citationsExpanded;\r\n }\r\n\r\n private approveToolCall() {\r\n if (this.message.role !== 'assistant') return;\r\n this.dispatchEvent(new ApproveToolCallCommand(this.message.turnId, this.message.messageId));\r\n }\r\n\r\n private declineToolCall() {\r\n if (this.message.role !== 'assistant') return;\r\n this.dispatchEvent(new DeclineToolCallCommand(this.message.turnId, this.message.messageId));\r\n }\r\n\r\n protected override isHidden() {\r\n return !('content' in this.message) || !this.message.content;\r\n }\r\n\r\n protected override renderHeader() {\r\n return html`<div class=\"text-primary-900 mb-1 flex h-6 items-center gap-x-2\">\r\n <div class=\"flex size-4 items-center justify-center\">${unsafeSVG(sparklesSvg)}</div>\r\n <span class=\"text-sm font-medium\">GAiA</span>\r\n </div>\r\n ${guard([this.message.citations.length, this.citationsExpanded], () =>\r\n this.message.citations.length\r\n ? html`<div class=\"text-primary-800 hover:text-primary-900 text-xs font-semibold\">\r\n <a\r\n role=\"button\"\r\n class=\"group flex items-center gap-2 select-none\"\r\n aria-expanded=${this.citationsExpanded}\r\n @click=${this.toggleCitations}\r\n >\r\n <div\r\n class=\"flex size-4 items-center justify-center transition-transform duration-200 ease-in-out not-group-aria-expanded:-rotate-90\"\r\n >\r\n ${unsafeSVG(chevronDownSvg)}\r\n </div>\r\n ${msg(str`Used ${this.message.citations.length} sources`, {\r\n id: 'assistant-message-citations-length',\r\n })}\r\n </a>\r\n <section\r\n role=\"region\"\r\n class=${classNames(\r\n 'relative grid gap-2 transition-[transform,opacity,height,visibility] duration-200 ease-in-out overflow-hidden',\r\n {\r\n 'h-0 invisible opacity-0': !this.citationsExpanded,\r\n 'h-auto py-2 visible opacity-100': this.citationsExpanded,\r\n }\r\n )}\r\n >\r\n ${repeat(\r\n this.message.citations,\r\n (citation) => citation.url,\r\n (citation) =>\r\n html`<div class=\"flex min-w-0 items-center gap-2 overflow-x-clip\">\r\n <div class=\"flex size-4 items-center justify-center\">\r\n ${unsafeSVG(fileSvg)}\r\n </div>\r\n <a\r\n href=${citation.url}\r\n class=\"truncate hover:underline\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n title=${citation.url}\r\n >\r\n ${citation.title}\r\n </a>\r\n </div>`\r\n )}\r\n </section>\r\n </div>`\r\n : nothing\r\n )}`;\r\n }\r\n\r\n protected override renderBody() {\r\n return guard(this.message.content.length, () => {\r\n return html` <div class=\"prose prose-gaia prose-table:min-w-max\">\r\n ${unsafeHTML(renderMarkdown(this.message.content))}\r\n </div>`;\r\n });\r\n }\r\n\r\n protected override renderFooter() {\r\n return this.message.approvalStatus\r\n ? html`\r\n <div\r\n class=\"mt-2 flex items-center justify-center gap-x-2\"\r\n data-status=${this.message.approvalStatus}\r\n >\r\n <button\r\n @click=${this.approveToolCall}\r\n .disabled=${this.message.approvalStatus !== 'approvalRequested'}\r\n class=${classNames('btn btn-secondary w-fit border border-solid px-4 py-2', {\r\n 'bg-green-100 border-green-600 text-primary-900 [&_svg]:text-green-600':\r\n this.message.approvalStatus === 'approved',\r\n })}\r\n >\r\n <div class=\"flex items-center justify-center gap-2\">\r\n <div class=\"flex size-4 items-center justify-center\">${unsafeSVG(checkSvg)}</div>\r\n <span class=\"text-sm\">${msg('Yes', { id: 'assistant-message-approve' })}</span>\r\n </div>\r\n </button>\r\n <button\r\n @click=${this.declineToolCall}\r\n .disabled=${this.message.approvalStatus !== 'approvalRequested'}\r\n data-selected=${this.message.approvalStatus === 'declined'}\r\n class=${classNames('btn btn-secondary w-fit border border-solid px-4 py-2', {\r\n 'bg-red-100 border-red-600 text-primary-900 [&_svg]:text-red-600':\r\n this.message.approvalStatus === 'declined',\r\n })}\r\n >\r\n <div class=\"flex items-center justify-center gap-2\">\r\n <div class=\"flex size-4 items-center justify-center\">${unsafeSVG(circleXSvg)}</div>\r\n <span class=\"text-sm\">${msg('No', { id: 'assistant-message-decline' })}</span>\r\n </div>\r\n </button>\r\n </div>\r\n `\r\n : nothing;\r\n }\r\n}\r\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-headset-icon lucide-headset\\\"><path d=\\\"M3 11h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-5Zm0 0a9 9 0 1 1 18 0m0 0v5a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3Z\\\"/><path d=\\\"M21 16v2a4 4 0 0 1-4 4h-5\\\"/></svg>\"","import { html } from 'lit';\r\nimport { customElement } from 'lit/decorators.js';\r\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\r\n\r\nimport headsetSvg from '@/assets/icons/headset.svg?raw';\r\nimport type { OperatorMessage as OperatorMessageType } from '@/core/types';\r\n\r\nimport { BaseMessage } from './base';\r\n\r\n@customElement('gaia-chat-operator-message')\r\nexport class OperatorMessage extends BaseMessage<OperatorMessageType> {\r\n protected override renderHeader() {\r\n return html`<div class=\"flex items-center gap-1 pb-1\">\r\n <div class=\"relative size-6 p-0.5\">\r\n <div class=\"aspect-square h-full w-full overflow-hidden rounded-full\">\r\n ${this.message.operator.pictureUrl\r\n ? html`<img\r\n src=${this.message.operator.pictureUrl}\r\n alt=${this.message.operator.name}\r\n class=\"object-cover\"\r\n />`\r\n : html`<div class=\"text-primary-900 flex h-full w-full items-center justify-center\">\r\n <div class=\"size-4\">${unsafeSVG(headsetSvg)}</div>\r\n </div>`}\r\n </div>\r\n </div>\r\n <span class=\"text-primary-900 text-sm font-medium\">${this.message.operator.name}</span>\r\n </div>`;\r\n }\r\n\r\n protected override renderBody() {\r\n if (!('content' in this.message) || !this.message.content) return null;\r\n return html` <div\r\n class=\"relative flex min-h-9 w-fit max-w-[90%] rounded-sm bg-neutral-100 px-4 py-1.5\"\r\n >\r\n ${this.message.isTyping\r\n ? html`<div class=\"flex items-center space-x-1\">\r\n <span class=\"animate-grow h-2 w-2 rounded-full bg-neutral-600\"></span>\r\n <span\r\n class=\"animate-grow h-2 w-2 rounded-full bg-neutral-600 [animation-delay:0.3s]\"\r\n ></span>\r\n <span\r\n class=\"animate-grow h-2 w-2 rounded-full bg-neutral-600 [animation-delay:0.6s]\"\r\n ></span>\r\n </div> `\r\n : html`<div class=\"text-primary-900 whitespace-pre-wrap\">${this.message.content}</div>`}\r\n </div>`;\r\n }\r\n}\r\n","import { msg } from '@lit/localize';\r\nimport { html, nothing } from 'lit';\r\nimport { customElement } from 'lit/decorators.js';\r\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\r\n\r\nimport circleAlertSvg from '@/assets/icons/circle-alert.svg?raw';\r\nimport headsetSvg from '@/assets/icons/headset.svg?raw';\r\nimport megaphoneSvg from '@/assets/icons/megaphone.svg?raw';\r\nimport squarePenSvg from '@/assets/icons/square-pen.svg?raw';\r\nimport {\r\n ClearConversationCommand,\r\n ToggleFeedbackFormCommand,\r\n} from '@/core/events/internal/commands';\r\nimport type { SystemMessage as SystemMessageType } from '@/core/types';\r\n\r\nimport { BaseMessage } from './base';\r\n\r\n@customElement('gaia-chat-system-message')\r\nexport class SystemMessage extends BaseMessage<SystemMessageType> {\r\n protected override readonly position = 'center';\r\n\r\n protected override isHidden() {\r\n return this.message.isVisuallyHidden;\r\n }\r\n\r\n private clearConversation() {\r\n this.dispatchEvent(new ClearConversationCommand());\r\n }\r\n\r\n private openFeedbackForm() {\r\n this.dispatchEvent(new ToggleFeedbackFormCommand('support'));\r\n }\r\n\r\n protected override renderBody() {\r\n if (this.message.isSupportStartedMarker) {\r\n return html`<div\r\n class=\"m-0 grid w-full grid-cols-[auto_1fr_auto] gap-2 rounded-sm border border-solid border-neutral-600 p-4 [grid-template-areas:'leading_primary']\"\r\n >\r\n <div class=\"text-primary-900 flex flex-col gap-2 text-sm [grid-area:primary]\">\r\n <span\r\n >${msg('You have been connected to a human support agent.', {\r\n id: 'system-message-support-started',\r\n })}</span\r\n >\r\n </div>\r\n <div class=\"flex [grid-area:leading]\">\r\n <div class=\"text-primary-900 flex size-5 items-center justify-center\">\r\n ${unsafeSVG(headsetSvg)}\r\n </div>\r\n </div>\r\n </div>`;\r\n }\r\n\r\n if (this.message.isSupportCompletedMarker) {\r\n return html`<div\r\n class=\"m-0 grid w-full grid-cols-[auto_1fr_auto] gap-2 rounded-sm border border-solid border-neutral-600 p-4 [grid-template-areas:'leading_primary']\"\r\n >\r\n <div class=\"text-primary-900 flex flex-col gap-2 text-sm [grid-area:primary]\">\r\n <span\r\n >${msg('You have been disconnected from the human support agent.', {\r\n id: 'system-message-support-completed',\r\n })}</span\r\n >\r\n <span class=\"text-neutral-700\">\r\n ${msg(\r\n \"To continue, please start a new conversation. We'd also love to hear your feedback on our human support experience!\",\r\n { id: 'system-message-support-feedback' }\r\n )}\r\n </span>\r\n\r\n <div class=\"mt-3 flex flex-col gap-4 @md:flex-row\">\r\n <button class=\"btn btn-primary px-4 py-2\" @click=${this.clearConversation}>\r\n <div class=\"flex items-center justify-center gap-x-2\">\r\n <div class=\"flex size-4 items-center justify-center\">\r\n ${unsafeSVG(squarePenSvg)}\r\n </div>\r\n ${msg('Start New Conversation', {\r\n id: 'system-message-start-new-conversation',\r\n })}\r\n </div>\r\n </button>\r\n <button class=\"btn btn-secondary px-4 py-2\" @click=${this.openFeedbackForm}>\r\n <div class=\"flex items-center justify-center gap-x-2\">\r\n <div class=\"flex size-4 items-center justify-center\">\r\n ${unsafeSVG(megaphoneSvg)}\r\n </div>\r\n ${msg('Provide Feedback', {\r\n id: 'system-message-provide-feedback',\r\n })}\r\n </div>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"flex [grid-area:leading]\">\r\n <div class=\"text-primary-900 flex size-5 items-center justify-center\">\r\n ${unsafeSVG(circleAlertSvg)}\r\n </div>\r\n </div>\r\n </div>`;\r\n }\r\n\r\n return nothing;\r\n }\r\n}\r\n","import { html } from 'lit';\r\nimport { customElement } from 'lit/decorators.js';\r\n\r\nimport type { UserMessage as UserMessageType } from '@/core/types';\r\n\r\nimport { BaseMessage } from './base';\r\n\r\n@customElement('gaia-chat-user-message')\r\nexport class UserMessage extends BaseMessage<UserMessageType> {\r\n protected override readonly position = 'right';\r\n\r\n protected override renderBody() {\r\n if (!('content' in this.message) || !this.message.content) return null;\r\n\r\n return html` <div class=\"relative max-w-[90%] rounded-sm bg-blue-100 px-4 py-1.5\">\r\n <div class=\"whitespace-pre-wrap\">${this.message.content}</div>\r\n </div>`;\r\n }\r\n}\r\n","import { msg } from '@lit/localize';\r\nimport { html } from 'lit';\r\nimport { customElement } from 'lit/decorators.js';\r\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\r\n\r\nimport sparklesSvg from '@/assets/icons/sparkles.svg?raw';\r\n\r\nimport { TwElement } from './base-tw-element';\r\n\r\n@customElement('gaia-chat-thinking-indicator')\r\nexport class ThinkingIndicator extends TwElement {\r\n override render() {\r\n return html`\r\n <div class=\"relative w-full py-3\">\r\n <div class=\"mx-auto my-auto px-3 text-sm\">\r\n <div class=\"text-primary-900 mb-1 flex h-6 items-center gap-x-2\">\r\n <div class=\"flex size-4 items-center justify-center\">${unsafeSVG(sparklesSvg)}</div>\r\n <span class=\"text-shimmer text-shimmer-primary\"\r\n >${msg('Thinking...', { id: 'thinking-indicator-text' })}</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-lightbulb-icon lucide-lightbulb\\\"><path d=\\\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\\\"/><path d=\\\"M9 18h6\\\"/><path d=\\\"M10 22h4\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" class=\\\"lucide lucide-message-circle-icon lucide-message-circle\\\"><path d=\\\"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719\\\"/></svg>\"","import { msg } from '@lit/localize';\r\nimport { html } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { map } from 'lit/directives/map.js';\r\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\r\n\r\nimport lightbulbSvg from '@/assets/icons/lightbulb.svg?raw';\r\nimport messageCircleSvg from '@/assets/icons/message-circle.svg?raw';\r\nimport sparklesSvg from '@/assets/icons/sparkles.svg?raw';\r\nimport { WelcomeMessage, WelcomeMessageContentBlock } from '@/services/bootstrap-service';\r\n\r\nimport { TwElement } from './base-tw-element';\r\n\r\nconst iconMap: Record<string, string> = {\r\n SparklesIcon: sparklesSvg,\r\n LightBulbIcon: lightbulbSvg,\r\n MessageCircleIcon: messageCircleSvg,\r\n};\r\n\r\n@customElement('gaia-chat-welcome-message')\r\nexport class WelcomeMessageComponent extends TwElement {\r\n @property({ attribute: false })\r\n isInitialized = false;\r\n\r\n @property({ attribute: false })\r\n welcomeMessages?: WelcomeMessage;\r\n\r\n private renderSkeleton() {\r\n return html`\r\n <div>\r\n <div class=\"skeleton my-1 h-6 w-full @md:w-36\"></div>\r\n <div class=\"flex flex-col gap-y-1\">\r\n <p class=\"skeleton h-4 w-full @md:w-[90%]\"></p>\r\n <p class=\"skeleton h-4 w-full\"></p>\r\n <p class=\"skeleton h-4 w-full @md:w-1/2\"></p>\r\n </div>\r\n </div>\r\n <div class=\"hidden flex-col gap-2 @xs:flex @xl:grid @xl:grid-cols-2\">\r\n <div class=\"skeleton h-14 w-full\"></div>\r\n <div class=\"skeleton h-14 w-full\"></div>\r\n </div>\r\n\r\n <div class=\"skeleton my-1 h-5 w-full @md:w-1/2\"></div>\r\n `;\r\n }\r\n\r\n private renderWelcomeMessage(welcomeMessages: WelcomeMessage | undefined) {\r\n if (!welcomeMessages && !this.isInitialized) {\r\n return this.renderSkeleton();\r\n }\r\n if (!welcomeMessages) {\r\n return html`\r\n <div class=\"flex items-center gap-x-2\">\r\n <div class=\"flex size-5 items-center justify-center\">${unsafeSVG(sparklesSvg)}</div>\r\n <p class=\"text-shimmer text-shimmer-primary text-lg font-semibold\">Hello!</p>\r\n </div>\r\n `;\r\n }\r\n return html`\r\n <div>\r\n <div class=\"flex items-center gap-x-2\">\r\n <div class=\"flex size-5 items-center justify-center\">${unsafeSVG(sparklesSvg)}</div>\r\n <p class=\"text-shimmer text-shimmer-primary text-lg font-semibold\">\r\n ${welcomeMessages.title}\r\n </p>\r\n </div>\r\n <p>${welcomeMessages.body}</p>\r\n </div>\r\n <div class=\"hidden flex-col gap-2 @xs:flex @xl:grid @xl:grid-cols-2\">\r\n ${map(welcomeMessages.blocks, (block) => this.renderMessageBlock(block))}\r\n </div>\r\n\r\n <p class=\"font-semibold\">${welcomeMessages.callToAction}</p>\r\n `;\r\n }\r\n\r\n private renderMessageBlock(block: WelcomeMessageContentBlock) {\r\n const icon = iconMap[block.icon];\r\n return html`\r\n <div class=\"flex items-center gap-x-2 rounded-sm border border-solid border-neutral-300 p-2\">\r\n <div class=\"text-primary-800 flex size-6 items-center justify-center\">\r\n ${unsafeSVG(icon)}\r\n </div>\r\n <p>${block.text}</p>\r\n </div>\r\n `;\r\n }\r\n\r\n override render() {\r\n return html`\r\n <div class=\"relative flex h-full w-full flex-col gap-y-8 overflow-x-hidden overflow-y-auto\">\r\n <div class=\"flex w-full items-center justify-center pt-2 text-center\">\r\n <span class=\"text-xs text-neutral-600\">\r\n ${msg('Answers are generated by AI and may contain errors, read more', {\r\n id: 'disclaimer-text',\r\n })}\r\n <a\r\n class=\"font-medium hover:underline\"\r\n target=\"_blank\"\r\n href=\"https://kundeportal.vismasoftware.no/s/article/Vilkår-for-bruk-av-Visma-Software-AI-chat\"\r\n >${msg('here', { id: 'disclaimer-link' })}</a\r\n >.\r\n </span>\r\n </div>\r\n <div class=\"flex w-full flex-col\">\r\n <div class=\"text-primary-900 flex w-full flex-col gap-y-8 text-sm text-wrap\">\r\n ${this.renderWelcomeMessage(this.welcomeMessages)}\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n","import { html, nothing, type PropertyValues } from 'lit';\r\nimport { customElement, property, query } from 'lit/decorators.js';\r\nimport { repeat } from 'lit/directives/repeat.js';\r\n\r\nimport '@/components/error-message';\r\nimport '@/components/feedback-form';\r\nimport '@/components/message';\r\nimport '@/components/thinking-indicator';\r\nimport '@/components/welcome-message';\r\nimport { AppError } from '@/core/errors/app-error';\r\nimport type { ChatChannel, UiMessage } from '@/core/types';\r\nimport { WelcomeMessage } from '@/services/bootstrap-service';\r\n\r\nimport { TwElement } from './base-tw-element';\r\n\r\n@customElement('gaia-chat-message-list')\r\nexport class MessageList extends TwElement {\r\n @query('#scroll-view')\r\n private $scrollView!: HTMLDivElement;\r\n\r\n @property({ attribute: false })\r\n isInitialized = false;\r\n\r\n @property({ attribute: false })\r\n welcomeMessages?: WelcomeMessage;\r\n\r\n @property({ attribute: false })\r\n isThinking: boolean = false;\r\n\r\n @property({ attribute: false })\r\n feedbackFormOpen: boolean = false;\r\n\r\n @property({ attribute: false })\r\n feedbackFormTarget: ChatChannel = 'assistant';\r\n\r\n @property({ attribute: false })\r\n error: AppError | null = null;\r\n\r\n @property({ attribute: false })\r\n isConnectedToSupport: boolean = false;\r\n\r\n @property({ attribute: false })\r\n messages: UiMessage[] = [];\r\n\r\n private get latestMessage() {\r\n if (this.messages.length === 0) return null;\r\n return this.messages[this.messages.length - 1];\r\n }\r\n\r\n protected override updated(changedProperties: PropertyValues<this>): void {\r\n super.updated(changedProperties);\r\n\r\n if (changedProperties.has('messages')) {\r\n requestAnimationFrame(() => this.handleScrollMessages(changedProperties.get('messages')));\r\n }\r\n\r\n if (changedProperties.has('feedbackFormOpen')) {\r\n if (this.feedbackFormOpen) {\r\n requestAnimationFrame(() => this.scrollFeedbackFormIntoView());\r\n }\r\n }\r\n }\r\n\r\n private handleScrollMessages(prevMsgs: UiMessage[] | undefined) {\r\n const prevLength = prevMsgs?.length ?? 0;\r\n const hasChanged = this.messages.length === prevLength;\r\n if (!prevMsgs && !hasChanged) return;\r\n\r\n const hasNewMessage = this.messages.length > prevLength;\r\n\r\n if (this.messages.length === 0) {\r\n return this.resetScroll();\r\n }\r\n\r\n if (hasNewMessage && this.latestMessage?.role === 'system') {\r\n if (this.latestMessage.isSupportStartedMarker) {\r\n return this.scrollLatestMessageToTop();\r\n }\r\n return this.scrollLatestMessageIntoView();\r\n }\r\n\r\n if (this.isConnectedToSupport) {\r\n return this.scrollLatestMessageIntoView();\r\n } else if (hasNewMessage && this.latestMessage?.role === 'user') {\r\n return this.scrollLatestMessageToTop();\r\n }\r\n\r\n if (prevLength === 0 && hasNewMessage) {\r\n return this.scrollLatestMessageIntoView();\r\n }\r\n\r\n return;\r\n }\r\n\r\n private resetScroll() {\r\n const $wrapper = this.$scrollView.parentElement;\r\n if (!$wrapper) return;\r\n $wrapper.scrollTop = 0;\r\n this.$scrollView.style.height = `${$wrapper.getBoundingClientRect().height}px`;\r\n }\r\n\r\n private scrollLatestMessageToTop() {\r\n const $wrapper = this.$scrollView.parentElement;\r\n if (!$wrapper) return;\r\n\r\n const msgs = this.renderRoot.querySelectorAll('[role=\"message\"]');\r\n if (msgs.length < 1) return;\r\n const latest = msgs[msgs.length - 1] as HTMLElement;\r\n\r\n this.$scrollView.style.height = `${$wrapper.getBoundingClientRect().height + latest.offsetTop}px`;\r\n latest.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n }\r\n\r\n private scrollLatestMessageIntoView() {\r\n const msgs = this.renderRoot.querySelectorAll('[role=\"message\"]');\r\n if (msgs.length < 1) return;\r\n const latest = msgs[msgs.length - 1] as HTMLElement;\r\n\r\n latest.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n }\r\n\r\n private scrollFeedbackFormIntoView() {\r\n const $wrapper = this.$scrollView.parentElement;\r\n if (!$wrapper) return;\r\n $wrapper.scrollTo({ top: this.$scrollView.scrollHeight, behavior: 'smooth' });\r\n }\r\n\r\n override render() {\r\n return html` <div class=\"relative flex h-full\">\r\n <div class=\"relative flex min-w-0 flex-grow-1 basis-auto flex-col\">\r\n <div class=\"relative h-full overflow-y-auto\">\r\n <div\r\n class=\"mx-auto flex h-full min-h-full max-w-2xl min-w-0 flex-col @lg/main:px-4\"\r\n id=\"scroll-view\"\r\n >\r\n ${this.messages.length === 0\r\n ? html`<gaia-chat-welcome-message\r\n class=\"h-full\"\r\n .isInitialized=${this.isInitialized}\r\n .welcomeMessages=${this.welcomeMessages}\r\n ></gaia-chat-welcome-message>`\r\n : nothing}\r\n ${repeat(\r\n this.messages,\r\n (message) => message.messageId,\r\n (message) => {\r\n switch (message.role) {\r\n case 'assistant':\r\n return html`<gaia-chat-assistant-message\r\n .message=${message}\r\n ></gaia-chat-assistant-message>`;\r\n case 'user':\r\n return html`<gaia-chat-user-message\r\n .message=${message}\r\n ></gaia-chat-user-message>`;\r\n case 'operator':\r\n return html`<gaia-chat-operator-message\r\n .message=${message}\r\n ></gaia-chat-operator-message>`;\r\n case 'system':\r\n return html`<gaia-chat-system-message\r\n .message=${message}\r\n ></gaia-chat-system-message>`;\r\n default:\r\n return nothing;\r\n }\r\n }\r\n )}\r\n ${this.isThinking\r\n ? html`<gaia-chat-thinking-indicator></gaia-chat-thinking-indicator>`\r\n : nothing}\r\n ${this.feedbackFormOpen\r\n ? html`<gaia-chat-feedback-form\r\n .target=${this.feedbackFormTarget}\r\n ></gaia-chat-feedback-form>`\r\n : nothing}\r\n </div>\r\n </div>\r\n </div>\r\n ${this.error ? html`<gaia-chat-error .error=${this.error}></gaia-chat-error>` : nothing}\r\n </div>`;\r\n }\r\n}\r\n","// src/infra/signalr/signalr-error.ts\r\nexport class SignalRError extends Error {\r\n constructor(\r\n message?: string,\r\n public readonly innerError?: unknown\r\n ) {\r\n super(message);\r\n this.name = 'SignalRError';\r\n }\r\n}\r\n","export class StreamError extends Error {\r\n constructor(\r\n public readonly innerError?: unknown,\r\n message?: string,\r\n public readonly errorType?: string\r\n ) {\r\n super(message);\r\n }\r\n}\r\n","import { msg } from '@lit/localize';\r\n\r\nimport { ApiError } from '@/infra/http/api-error';\r\nimport { SignalRError } from '@/infra/signalr/signalr-error';\r\nimport { StreamError } from '@/infra/sse/stream-error';\r\n\r\nexport type ErrorCode =\r\n | 'NETWORK'\r\n | 'CANCELED'\r\n | 'UNAUTHORIZED'\r\n | 'FORBIDDEN'\r\n | 'NOT_FOUND'\r\n | 'RATE_LIMIT'\r\n | 'SERVER'\r\n | 'SSE'\r\n | 'WS'\r\n | 'UNKNOWN';\r\n\r\nexport type AppError = {\r\n code: ErrorCode;\r\n message: string;\r\n retryable: boolean;\r\n source?: 'http' | 'sse' | 'ws' | 'ui' | 'unknown';\r\n http?: { status?: number; url?: string; retryAfterMs?: number };\r\n cause?: unknown;\r\n};\r\n\r\nexport function toAppError(err: unknown): AppError {\r\n if (err instanceof DOMException && err.name === 'AbortError')\r\n return {\r\n code: 'CANCELED',\r\n message: msg('Request canceled.', { id: 'error-request-canceled' }),\r\n retryable: false,\r\n source: 'ui',\r\n cause: err,\r\n };\r\n\r\n if (err instanceof ApiError) {\r\n if (err.isNetworkError)\r\n return {\r\n code: 'NETWORK',\r\n message: msg('Network error. Check your connection.', { id: 'error-network-error' }),\r\n retryable: true,\r\n source: 'http',\r\n http: { status: 0, url: err.url },\r\n cause: err,\r\n };\r\n if (err.isUnauthorized)\r\n return {\r\n code: 'UNAUTHORIZED',\r\n message: msg('Your session expired. Please sign in again.', {\r\n id: 'error-session-expired',\r\n }),\r\n retryable: false,\r\n source: 'http',\r\n http: { status: 401, url: err.url },\r\n cause: err,\r\n };\r\n if (err.isForbidden)\r\n return {\r\n code: 'FORBIDDEN',\r\n message: msg(\"You don't have access to this action.\", { id: 'error-forbidden' }),\r\n retryable: false,\r\n source: 'http',\r\n http: { status: 403, url: err.url },\r\n cause: err,\r\n };\r\n if (err.isNotFound)\r\n return {\r\n code: 'NOT_FOUND',\r\n message: msg('Not found.', { id: 'error-not-found' }),\r\n retryable: false,\r\n source: 'http',\r\n http: { status: 404, url: err.url },\r\n cause: err,\r\n };\r\n if (err.status === 429)\r\n return {\r\n code: 'RATE_LIMIT',\r\n message: msg('Too many requests. Please slow down.', { id: 'error-rate-limit' }),\r\n retryable: true,\r\n source: 'http',\r\n http: { status: 429, url: err.url },\r\n cause: err,\r\n };\r\n if (err.isServerError)\r\n return {\r\n code: 'SERVER',\r\n message: msg('The server had a problem. Please try again.', { id: 'error-server-error' }),\r\n retryable: true,\r\n source: 'http',\r\n http: { status: err.status, url: err.url },\r\n cause: err,\r\n };\r\n return {\r\n code: 'UNKNOWN',\r\n message: msg('Something went wrong.', { id: 'error-something-went-wrong' }),\r\n retryable: true,\r\n source: 'http',\r\n http: { status: err.status, url: err.url },\r\n cause: err,\r\n };\r\n }\r\n\r\n if (err instanceof StreamError) {\r\n if (err.errorType && err.errorType === 'ProfileNotFoundException') {\r\n return {\r\n code: 'NOT_FOUND',\r\n message: msg('Failed to load the current profile. Are you using the correct profile?', {\r\n id: 'error-profile-not-found',\r\n }),\r\n retryable: false,\r\n };\r\n }\r\n return {\r\n code: 'SSE',\r\n message: msg('Live response stream interrupted. Try again.', { id: 'error-sse-error' }),\r\n retryable: true,\r\n source: 'sse',\r\n cause: err,\r\n };\r\n }\r\n if (err instanceof SignalRError)\r\n return {\r\n code: 'WS',\r\n message: msg('Live chat connection error. Reconnecting might help.', {\r\n id: 'error-ws-error',\r\n }),\r\n retryable: true,\r\n source: 'ws',\r\n cause: err,\r\n };\r\n\r\n return {\r\n code: 'UNKNOWN',\r\n message: msg('Unexpected error. Please try again.', { id: 'error-unexpected-error' }),\r\n retryable: true,\r\n source: 'unknown',\r\n cause: err,\r\n };\r\n}\r\n","import { BootstrapConfigResponse, WelcomeMessage } from '@/services/bootstrap-service';\r\n\r\nexport type ConfigState = {\r\n initialized: boolean;\r\n maxInputLength: number;\r\n welcomeMessages: Readonly<Record<string, WelcomeMessage>>;\r\n};\r\n\r\nexport const initialConfigState: ConfigState = {\r\n initialized: false,\r\n maxInputLength: 2000,\r\n welcomeMessages: {},\r\n};\r\n\r\nexport type ConfigAction =\r\n | {\r\n type: 'config/setInitialized';\r\n }\r\n | {\r\n type: 'config/set';\r\n payload: BootstrapConfigResponse;\r\n }\r\n | {\r\n type: 'config/clear';\r\n };\r\n\r\nexport const setInitialized = (): ConfigAction => ({\r\n type: 'config/setInitialized',\r\n});\r\n\r\nexport const setConfig = (config: BootstrapConfigResponse): ConfigAction => ({\r\n type: 'config/set',\r\n payload: config,\r\n});\r\n\r\nexport const clearConfig = (): ConfigAction => ({\r\n type: 'config/clear',\r\n});\r\n\r\nexport function configReducer(\r\n state: ConfigState = initialConfigState,\r\n action: ConfigAction\r\n): ConfigState {\r\n switch (action.type) {\r\n case 'config/setInitialized':\r\n return {\r\n ...state,\r\n initialized: true,\r\n };\r\n case 'config/set':\r\n return {\r\n ...state,\r\n ...action.payload,\r\n initialized: true,\r\n };\r\n case 'config/clear':\r\n return {\r\n ...state,\r\n initialized: false,\r\n welcomeMessages: {},\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { UiMessage } from '@/core/types';\r\n\r\nexport type MessagesState = {\r\n entities: Record<string, UiMessage>;\r\n ids: string[];\r\n};\r\n\r\nexport const initialMessagesState: MessagesState = {\r\n entities: {},\r\n ids: [],\r\n};\r\n\r\nexport type MessagesAction =\r\n | { type: 'messages/set'; payload: UiMessage[] }\r\n | { type: 'messages/add'; payload: UiMessage }\r\n | { type: 'messages/delete'; payload: string }\r\n | { type: 'messages/patch'; payload: { id: string; patch: Partial<UiMessage> } }\r\n | { type: 'messages/add-delta'; payload: { id: string; delta: string } };\r\n\r\nexport const setMessages = (msgs: UiMessage[]): MessagesAction => ({\r\n type: 'messages/set',\r\n payload: msgs,\r\n});\r\n\r\nexport const addMessage = (msg: UiMessage): MessagesAction => ({\r\n type: 'messages/add',\r\n payload: msg,\r\n});\r\n\r\nexport const deleteMessage = (id: string): MessagesAction => ({\r\n type: 'messages/delete',\r\n payload: id,\r\n});\r\n\r\nexport const patchMessage = (id: string, patch: Partial<UiMessage>): MessagesAction => ({\r\n type: 'messages/patch',\r\n payload: { id, patch },\r\n});\r\n\r\nexport const addContentDelta = (id: string, delta: string): MessagesAction => ({\r\n type: 'messages/add-delta',\r\n payload: { id, delta },\r\n});\r\n\r\nexport function messagesReducer(\r\n state: MessagesState = initialMessagesState,\r\n action: MessagesAction\r\n): MessagesState {\r\n switch (action.type) {\r\n case 'messages/set':\r\n return {\r\n ...state,\r\n ids: action.payload.map((m) => m.messageId),\r\n entities: action.payload.reduce((acc, m) => ({ ...acc, [m.messageId]: m }), {}),\r\n };\r\n case 'messages/add': {\r\n const m = action.payload;\r\n return {\r\n ...state,\r\n ids: [...state.ids, m.messageId],\r\n entities: { ...state.entities, [m.messageId]: m },\r\n };\r\n }\r\n case 'messages/delete': {\r\n const newEntities = { ...state.entities };\r\n delete newEntities[action.payload];\r\n return {\r\n ...state,\r\n ids: state.ids.filter((id) => id !== action.payload),\r\n entities: newEntities,\r\n };\r\n }\r\n case 'messages/patch': {\r\n const { id, patch } = action.payload;\r\n const prev = state.entities[id];\r\n if (!prev) return state;\r\n return {\r\n ...state,\r\n entities: { ...state.entities, [id]: { ...prev, ...patch } as UiMessage },\r\n };\r\n }\r\n case 'messages/add-delta': {\r\n const { id, delta } = action.payload;\r\n const prev = state.entities[id];\r\n if (!prev) return state;\r\n const content = ('content' in prev ? prev.content : '') + delta;\r\n return {\r\n ...state,\r\n entities: { ...state.entities, [id]: { ...prev, content } as UiMessage },\r\n };\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { ChatChannel } from '@/core/types';\r\n\r\nexport type SessionState = {\r\n conversationId: string | null;\r\n cursorId: string | null;\r\n channel: ChatChannel;\r\n isActive: boolean;\r\n isThinking: boolean;\r\n isBusy: boolean;\r\n};\r\n\r\nexport const initialSessionState: SessionState = {\r\n conversationId: null,\r\n cursorId: null,\r\n channel: 'assistant',\r\n isActive: true,\r\n isThinking: false,\r\n isBusy: false,\r\n};\r\n\r\nexport type SessionAction =\r\n | { type: 'session/set-conversation-id'; payload: string | null }\r\n | { type: 'session/set-cursor-id'; payload: string | null }\r\n | { type: 'session/set-channel'; payload: ChatChannel }\r\n | { type: 'session/set-active'; payload: boolean }\r\n | { type: 'session/set-thinking'; payload: boolean }\r\n | { type: 'session/set-busy'; payload: boolean };\r\n\r\nexport const setConversationId = (id: string | null): SessionAction => {\r\n return {\r\n type: 'session/set-conversation-id',\r\n payload: id,\r\n };\r\n};\r\n\r\nexport const setCursorId = (id: string | null): SessionAction => ({\r\n type: 'session/set-cursor-id',\r\n payload: id,\r\n});\r\n\r\nexport const setChannel = (channel: ChatChannel): SessionAction => ({\r\n type: 'session/set-channel',\r\n payload: channel,\r\n});\r\n\r\nexport const setActive = (active: boolean): SessionAction => ({\r\n type: 'session/set-active',\r\n payload: active,\r\n});\r\n\r\nexport const setThinking = (thinking: boolean): SessionAction => ({\r\n type: 'session/set-thinking',\r\n payload: thinking,\r\n});\r\n\r\nexport const setBusy = (busy: boolean): SessionAction => ({\r\n type: 'session/set-busy',\r\n payload: busy,\r\n});\r\n\r\nexport function sessionReducer(\r\n state: SessionState = initialSessionState,\r\n action: SessionAction\r\n): SessionState {\r\n switch (action.type) {\r\n case 'session/set-conversation-id':\r\n return {\r\n ...state,\r\n conversationId: action.payload,\r\n };\r\n case 'session/set-cursor-id':\r\n return {\r\n ...state,\r\n cursorId: action.payload,\r\n };\r\n case 'session/set-channel':\r\n return {\r\n ...state,\r\n channel: action.payload,\r\n };\r\n case 'session/set-active':\r\n return {\r\n ...state,\r\n isActive: action.payload,\r\n };\r\n case 'session/set-thinking':\r\n return {\r\n ...state,\r\n isThinking: action.payload,\r\n };\r\n case 'session/set-busy':\r\n return {\r\n ...state,\r\n isBusy: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AppError } from '@/core/errors/app-error';\r\nimport { ChatChannel } from '@/core/types';\r\n\r\nexport type UiState = {\r\n feedbackFormOpen: boolean;\r\n feedbackFormTarget: ChatChannel;\r\n error?: AppError | null;\r\n errorStack?: AppError[];\r\n};\r\n\r\nexport const initialUiState: UiState = {\r\n feedbackFormOpen: false,\r\n feedbackFormTarget: 'assistant',\r\n error: null,\r\n errorStack: [],\r\n};\r\n\r\nexport type UiAction =\r\n | { type: 'ui/open-feedback-form'; payload: { target: ChatChannel } }\r\n | { type: 'ui/close-feedback-form' }\r\n | { type: 'ui/set-error'; payload: AppError | null }\r\n | { type: 'ui/push-error'; payload: AppError };\r\n\r\nexport const openFeedbackForm = (target: ChatChannel): UiAction => ({\r\n type: 'ui/open-feedback-form',\r\n payload: { target },\r\n});\r\n\r\nexport const closeFeedbackForm = (): UiAction => ({\r\n type: 'ui/close-feedback-form',\r\n});\r\n\r\nexport const setError = (error: AppError | null): UiAction => ({\r\n type: 'ui/set-error',\r\n payload: error,\r\n});\r\n\r\nexport const pushError = (error: AppError): UiAction => ({\r\n type: 'ui/push-error',\r\n payload: error,\r\n});\r\n\r\nexport function uiReducer(state: UiState = initialUiState, action: UiAction): UiState {\r\n switch (action.type) {\r\n case 'ui/open-feedback-form':\r\n return {\r\n ...state,\r\n feedbackFormOpen: true,\r\n feedbackFormTarget: action.payload.target,\r\n };\r\n case 'ui/close-feedback-form':\r\n return {\r\n ...state,\r\n feedbackFormOpen: false,\r\n };\r\n case 'ui/set-error':\r\n return {\r\n ...state,\r\n error: action.payload,\r\n };\r\n case 'ui/push-error': {\r\n const stack = state.errorStack ?? [];\r\n return {\r\n ...state,\r\n errorStack: [...stack, action.payload as AppError],\r\n error: action.payload as AppError,\r\n };\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n","import {\r\n ConfigAction,\r\n configReducer,\r\n ConfigState,\r\n initialConfigState,\r\n} from './slices/config-slice';\r\nimport {\r\n initialMessagesState,\r\n messagesReducer,\r\n type MessagesAction,\r\n type MessagesState,\r\n} from './slices/messages-slice';\r\nimport {\r\n initialSessionState,\r\n sessionReducer,\r\n type SessionAction,\r\n type SessionState,\r\n} from './slices/session-slice';\r\nimport { initialUiState, uiReducer, type UiAction, type UiState } from './slices/ui-slice';\r\n\r\nexport type AppState = {\r\n config: ConfigState;\r\n messages: MessagesState;\r\n session: SessionState;\r\n ui: UiState;\r\n};\r\n\r\nexport const initialRootState: AppState = {\r\n config: initialConfigState,\r\n messages: initialMessagesState,\r\n session: initialSessionState,\r\n ui: initialUiState,\r\n};\r\n\r\nexport const APP_RESET = 'app/reset' as const;\r\nexport const resetAll = () => ({ type: APP_RESET }) as const;\r\nexport type ResetAction = ReturnType<typeof resetAll>;\r\n\r\nexport type RootAction = ConfigAction | MessagesAction | UiAction | SessionAction | ResetAction;\r\n\r\nexport function rootReducer(state: AppState, action: RootAction): AppState {\r\n if (action.type === APP_RESET) {\r\n return { ...initialRootState, config: state.config };\r\n }\r\n\r\n const s = state ?? initialRootState;\r\n return {\r\n config: configReducer(s.config, action as ConfigAction),\r\n messages: messagesReducer(s.messages, action as MessagesAction),\r\n session: sessionReducer(s.session, action as SessionAction),\r\n ui: uiReducer(s.ui, action as UiAction),\r\n };\r\n}\r\n","import { initialRootState, rootReducer, type AppState, type RootAction } from './root-reducer';\r\n\r\nexport class AppStore {\r\n private state: AppState; // State is no longer initialized here\r\n private reducer: (state: AppState, action: RootAction) => AppState;\r\n private listeners = new Set<(state: AppState) => void>();\r\n private pending = false;\r\n\r\n constructor(\r\n reducer: (state: AppState, action: RootAction) => AppState = rootReducer,\r\n initialState: AppState = initialRootState\r\n ) {\r\n this.state = initialState;\r\n this.reducer = reducer;\r\n }\r\n\r\n get snapshot() {\r\n return this.state;\r\n }\r\n\r\n subscribe(listener: (state: AppState) => void) {\r\n this.listeners.add(listener);\r\n listener(this.state);\r\n return () => this.listeners.delete(listener);\r\n }\r\n\r\n dispatch(action: RootAction) {\r\n this.state = this.reducer(this.state, action);\r\n if (!this.pending) {\r\n this.pending = true;\r\n queueMicrotask(() => {\r\n this.pending = false;\r\n for (const l of this.listeners) l(this.state);\r\n });\r\n }\r\n }\r\n}\r\n","import { UiMessage } from '@/core/types';\r\n\r\nimport type { AppState } from './root-reducer';\r\n\r\nexport * from './root-reducer';\r\nexport * from './slices/config-slice';\r\nexport * from './slices/messages-slice';\r\nexport * from './slices/session-slice';\r\nexport * from './slices/ui-slice';\r\nexport * from './store';\r\n\r\nexport const selectMessages = (() => {\r\n let lastIds: string[] = [];\r\n let lastEntities: Record<string, UiMessage> = {};\r\n let lastResult: UiMessage[] = [];\r\n return (s: AppState) => {\r\n if (s.messages.ids === lastIds && s.messages.entities === lastEntities) return lastResult;\r\n lastIds = s.messages.ids;\r\n lastEntities = s.messages.entities;\r\n lastResult = lastIds.map((id) => lastEntities[id]);\r\n return lastResult;\r\n };\r\n})();\r\n","import { toAppError } from '@/core/errors/app-error';\r\nimport { AppStore, clearConfig, setConfig, setError, setInitialized } from '@/core/state';\r\nimport { BootstrapService } from '@/services/bootstrap-service';\r\n\r\nexport class BootstrapEffect {\r\n constructor(\r\n private store: AppStore,\r\n private svc: BootstrapService\r\n ) {}\r\n\r\n async initialize() {\r\n try {\r\n const config = await this.svc.getBootstrapConfig();\r\n this.store.dispatch(setConfig(config));\r\n } catch (error) {\r\n this.store.dispatch(setError(toAppError(error)));\r\n console.error('Failed to load bootstrap configuration:', error);\r\n } finally {\r\n this.store.dispatch(setInitialized());\r\n }\r\n }\r\n\r\n async clear() {\r\n this.svc.clearBootstrapConfig();\r\n this.store.dispatch(clearConfig());\r\n }\r\n}\r\n","import type { IStorage } from './types';\r\n\r\nexport class ConversationIdStorage implements IStorage<string> {\r\n private readonly key = 'gaia-chat:conversation-id';\r\n\r\n load(): string | null {\r\n const value = localStorage.getItem(this.key);\r\n if (!value) {\r\n return null;\r\n }\r\n return value;\r\n }\r\n\r\n save(value: string): void {\r\n localStorage.setItem(this.key, value);\r\n }\r\n\r\n clear(): void {\r\n localStorage.removeItem(this.key);\r\n }\r\n}\r\n","import { AppStore, resetAll, setChannel, setConversationId, setMessages } from '@/core/state';\r\nimport { ConversationIdStorage } from '@/infra/storage/conversation-id-storage';\r\nimport { ChatService } from '@/services/chat-service';\r\n\r\nexport class ConversationEffect {\r\n private storage: ConversationIdStorage;\r\n\r\n constructor(\r\n private store: AppStore,\r\n private svc: ChatService\r\n ) {\r\n this.storage = new ConversationIdStorage();\r\n }\r\n\r\n async getHistory() {\r\n const conversationId = this.storage.load();\r\n if (!conversationId) return;\r\n\r\n this.store.dispatch(setConversationId(conversationId));\r\n try {\r\n const convo = await this.svc.getConversationHistory(conversationId);\r\n this.store.dispatch(setMessages(convo.messages));\r\n this.store.dispatch(setChannel(convo.channel));\r\n } catch {\r\n this.store.dispatch(setConversationId(null));\r\n this.storage.clear();\r\n }\r\n }\r\n\r\n clear() {\r\n this.storage.clear();\r\n this.store.dispatch(resetAll());\r\n }\r\n}\r\n","import { toAppError } from '@/core/errors/app-error';\r\nimport { AppStore, closeFeedbackForm, setConversationId, setError } from '@/core/state';\r\nimport { FeedbackService } from '@/services/feedback-service';\r\n\r\nimport { ChatChannel } from '../types';\r\n\r\nexport class FeedbackEffect {\r\n constructor(\r\n private store: AppStore,\r\n private svc: FeedbackService\r\n ) {}\r\n\r\n async submitFeedback(target: ChatChannel, rating: number, comment: string | null) {\r\n const conversationId = this.store.snapshot.session.conversationId;\r\n if (!conversationId) return;\r\n\r\n this.store.dispatch(setConversationId(conversationId));\r\n try {\r\n await this.svc.submitFeedback({\r\n conversationId,\r\n target,\r\n score: rating,\r\n comment,\r\n });\r\n this.store.dispatch(closeFeedbackForm());\r\n } catch (error) {\r\n this.store.dispatch(setError(toAppError(error)));\r\n }\r\n }\r\n}\r\n","import type {\r\n MessageStatus,\r\n Operator,\r\n OperatorMessage,\r\n SystemMessage,\r\n UserMessage,\r\n} from '@/core/types';\r\n\r\ntype IdGen = () => string;\r\ntype Clock = () => string;\r\n\r\nconst defaultIdGen: IdGen = () => crypto.randomUUID();\r\nconst defaultClock: Clock = () => new Date().toISOString();\r\n\r\ntype Options = {\r\n idGen?: IdGen;\r\n now?: Clock;\r\n status?: MessageStatus;\r\n};\r\n\r\nexport function createUserMessage(content: string, options?: Options): UserMessage {\r\n const now = options?.now?.() ?? defaultClock();\r\n return {\r\n messageId: options?.idGen?.() ?? defaultIdGen(),\r\n turnId: defaultIdGen(),\r\n role: 'user',\r\n status: options?.status ?? 'completed',\r\n content,\r\n createdAt: now,\r\n updatedAt: now,\r\n };\r\n}\r\n\r\nexport function createSupportCompletedMarker(options?: Options): SystemMessage {\r\n const now = options?.now?.() ?? defaultClock();\r\n return {\r\n messageId: options?.idGen?.() ?? defaultIdGen(),\r\n turnId: defaultIdGen(),\r\n role: 'system',\r\n status: 'completed',\r\n content: '',\r\n createdAt: now,\r\n updatedAt: now,\r\n isSupportCompletedMarker: true,\r\n isSupportStartedMarker: false,\r\n isVisuallyHidden: false,\r\n };\r\n}\r\n\r\nexport function createOperatorMessage(\r\n operator: Operator,\r\n content: string,\r\n options?: Options & { isTyping?: boolean }\r\n): OperatorMessage {\r\n const now = options?.now?.() ?? defaultClock();\r\n return {\r\n messageId: options?.idGen?.() ?? defaultIdGen(),\r\n role: 'operator',\r\n status: options?.status ?? 'pending',\r\n operator,\r\n content,\r\n createdAt: now,\r\n updatedAt: now,\r\n isTyping: options?.isTyping ?? false,\r\n };\r\n}\r\n","import { toAppError } from '@/core/errors/app-error';\r\nimport { ChatSseEvent } from '@/core/events/transport/sse';\r\nimport {\r\n addContentDelta,\r\n addMessage,\r\n AppStore,\r\n patchMessage,\r\n setChannel,\r\n setConversationId,\r\n setCursorId,\r\n setError,\r\n setThinking,\r\n} from '@/core/state';\r\nimport { StreamError } from '@/infra/sse/stream-error';\r\n\r\nexport type SpecificChatSseEvent<E extends ChatSseEvent['event']> = Extract<\r\n ChatSseEvent,\r\n { event: E }\r\n>;\r\n\r\nexport type SseEventHandlers = {\r\n [E in ChatSseEvent['event']]: (event: SpecificChatSseEvent<E>) => void;\r\n};\r\n\r\nexport const makeSseHandlers = (s: AppStore): Partial<SseEventHandlers> =>\r\n ({\r\n 'conversation.start': (e) => {\r\n s.dispatch(setConversationId(e.data));\r\n },\r\n 'turn.start': (e) => {\r\n const cur = s.snapshot.session.cursorId;\r\n if (cur) s.dispatch(patchMessage(cur, e.data.message));\r\n },\r\n 'assistant.start': (e) => {\r\n s.dispatch(addMessage(e.data));\r\n s.dispatch(setCursorId(e.data.messageId));\r\n },\r\n 'assistant.delta': (e) => {\r\n const cur = s.snapshot.session.cursorId;\r\n if (cur) {\r\n s.dispatch(addContentDelta(cur, e.data));\r\n s.dispatch(setThinking(false));\r\n }\r\n },\r\n 'assistant.tool': (e) => {\r\n const cur = s.snapshot.session.cursorId;\r\n if (cur) s.dispatch(patchMessage(cur, e.data));\r\n },\r\n 'assistant.complete': (e) => {\r\n s.dispatch(patchMessage(e.data.messageId, e.data));\r\n },\r\n 'tool.start': (e) => {\r\n s.dispatch(addMessage(e.data));\r\n s.dispatch(setCursorId(e.data.messageId));\r\n },\r\n 'tool.complete': (e) => {\r\n const cur = s.snapshot.session.cursorId;\r\n if (cur) s.dispatch(patchMessage(cur, { toolCallResult: e.data }));\r\n },\r\n 'tool.failed': (e) => {\r\n const cur = s.snapshot.session.cursorId;\r\n if (cur) s.dispatch(patchMessage(cur, { toolCallResult: e.data }));\r\n },\r\n 'turn.toolcalls.approved': (e) => {\r\n s.dispatch(patchMessage(e.data.messageId, { approvalStatus: 'approved' }));\r\n },\r\n 'turn.toolcalls.declined': (e) => {\r\n s.dispatch(patchMessage(e.data.messageId, { approvalStatus: 'declined' }));\r\n },\r\n 'support.handoff.start': (e) => {\r\n s.dispatch(addMessage(e.data.message));\r\n s.dispatch(setCursorId(e.data.message.messageId));\r\n s.dispatch(setChannel('support'));\r\n },\r\n error: (e) => {\r\n s.dispatch(\r\n setError(\r\n toAppError(new StreamError(null, e.data.message ?? 'Stream error', e.data.errorType))\r\n )\r\n );\r\n },\r\n }) as const;\r\n","export class TaskRunner {\r\n private abort?: AbortController;\r\n\r\n async run<T>(fn: (signal: AbortSignal) => Promise<T>): Promise<T> {\r\n this.abort?.abort();\r\n this.abort = new AbortController();\r\n return fn(this.abort.signal).finally(() => {\r\n if (this.abort?.signal.aborted === false) this.abort = undefined;\r\n });\r\n }\r\n\r\n cancel() {\r\n this.abort?.abort();\r\n }\r\n}\r\n","import { toAppError } from '@/core/errors/app-error';\r\nimport { ChatSseEvent } from '@/core/events/transport/sse';\r\nimport { addMessage, AppStore, pushError, setBusy, setCursorId, setThinking } from '@/core/state';\r\nimport { createUserMessage } from '@/core/utils/message-factory';\r\nimport { ConversationIdStorage } from '@/infra/storage/conversation-id-storage';\r\nimport { ChatService } from '@/services/chat-service';\r\n\r\nimport { makeSseHandlers, SseEventHandlers } from './stream-event-router';\r\nimport { TaskRunner } from './task-runner';\r\n\r\nexport class StreamEffect {\r\n private tasks = new TaskRunner();\r\n private handlers: Partial<SseEventHandlers>;\r\n private storage = new ConversationIdStorage();\r\n constructor(\r\n private store: AppStore,\r\n private svc: ChatService\r\n ) {\r\n this.handlers = makeSseHandlers(this.store);\r\n this.storage = new ConversationIdStorage();\r\n }\r\n\r\n async sendMessage(message: string, profileId: string, partnerId?: string) {\r\n const userId = crypto.randomUUID();\r\n this.store.dispatch(\r\n addMessage(\r\n createUserMessage(message, {\r\n idGen: () => userId,\r\n })\r\n )\r\n );\r\n this.store.dispatch(setCursorId(userId));\r\n\r\n const task = await this.tasks.run(async (signal) =>\r\n this.consume(\r\n this.svc.sendMessage(\r\n {\r\n message,\r\n profileId: profileId,\r\n conversationId: this.store.snapshot.session.conversationId,\r\n partnerId: partnerId ?? null,\r\n },\r\n signal\r\n )\r\n )\r\n );\r\n if (this.store.snapshot.session.conversationId) {\r\n this.storage.save(this.store.snapshot.session.conversationId);\r\n }\r\n return task;\r\n }\r\n\r\n async approveToolCall(turnId: string, messageId: string) {\r\n const conversationId = this.requireConversation();\r\n return this.tasks.run(async (signal) =>\r\n this.consume(\r\n this.svc.approveToolCall(\r\n {\r\n conversationId,\r\n turnId,\r\n messageId,\r\n },\r\n signal\r\n )\r\n )\r\n );\r\n }\r\n\r\n async declineToolCall(turnId: string, messageId: string) {\r\n const conversationId = this.requireConversation();\r\n return this.tasks.run(async (signal) =>\r\n this.consume(\r\n this.svc.declineToolCall(\r\n {\r\n conversationId,\r\n turnId,\r\n messageId,\r\n },\r\n signal\r\n )\r\n )\r\n );\r\n }\r\n\r\n abortCurrentTask() {\r\n this.tasks.cancel();\r\n }\r\n\r\n private async consume(stream: AsyncIterable<ChatSseEvent>) {\r\n this.store.dispatch(setBusy(true));\r\n this.store.dispatch(setThinking(true));\r\n try {\r\n for await (const evt of stream) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (this.handlers as any)[evt.event]?.(evt);\r\n }\r\n } catch (err) {\r\n console.error('[SSE] stream error', err);\r\n this.store.dispatch(pushError(toAppError(err)));\r\n } finally {\r\n this.store.dispatch(setThinking(false));\r\n this.store.dispatch(setBusy(false));\r\n }\r\n }\r\n\r\n private requireConversation() {\r\n const id = this.store.snapshot.session.conversationId;\r\n if (!id) throw new Error('No conversation id');\r\n return id;\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** Error thrown when an HTTP request fails. */\r\nexport class HttpError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n * @param {number} statusCode The HTTP status code represented by this error.\r\n */\r\n constructor(errorMessage, statusCode) {\r\n const trueProto = new.target.prototype;\r\n super(`${errorMessage}: Status code '${statusCode}'`);\r\n this.statusCode = statusCode;\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when a timeout elapses. */\r\nexport class TimeoutError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.TimeoutError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage = \"A timeout occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when an action is aborted. */\r\nexport class AbortError extends Error {\r\n /** Constructs a new instance of {@link AbortError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage = \"An abort occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the selected transport is unsupported by the browser. */\r\n/** @private */\r\nexport class UnsupportedTransportError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.UnsupportedTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message, transport) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'UnsupportedTransportError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the selected transport is disabled by the browser. */\r\n/** @private */\r\nexport class DisabledTransportError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.DisabledTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message, transport) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'DisabledTransportError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the selected transport cannot be started. */\r\n/** @private */\r\nexport class FailedToStartTransportError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToStartTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message, transport) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'FailedToStartTransportError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the negotiation with the server failed to complete. */\r\n/** @private */\r\nexport class FailedToNegotiateWithServerError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToNegotiateWithServerError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n */\r\n constructor(message) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.errorType = 'FailedToNegotiateWithServerError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when multiple errors have occurred. */\r\n/** @private */\r\nexport class AggregateErrors extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.AggregateErrors}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {Error[]} innerErrors The collection of errors this error is aggregating.\r\n */\r\n constructor(message, innerErrors) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.innerErrors = innerErrors;\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n//# sourceMappingURL=Errors.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** Represents an HTTP response. */\r\nexport class HttpResponse {\r\n constructor(statusCode, statusText, content) {\r\n this.statusCode = statusCode;\r\n this.statusText = statusText;\r\n this.content = content;\r\n }\r\n}\r\n/** Abstraction over an HTTP client.\r\n *\r\n * This class provides an abstraction over an HTTP client so that a different implementation can be provided on different platforms.\r\n */\r\nexport class HttpClient {\r\n get(url, options) {\r\n return this.send({\r\n ...options,\r\n method: \"GET\",\r\n url,\r\n });\r\n }\r\n post(url, options) {\r\n return this.send({\r\n ...options,\r\n method: \"POST\",\r\n url,\r\n });\r\n }\r\n delete(url, options) {\r\n return this.send({\r\n ...options,\r\n method: \"DELETE\",\r\n url,\r\n });\r\n }\r\n /** Gets all cookies that apply to the specified URL.\r\n *\r\n * @param url The URL that the cookies are valid for.\r\n * @returns {string} A string containing all the key-value cookie pairs for the specified URL.\r\n */\r\n // @ts-ignore\r\n getCookieString(url) {\r\n return \"\";\r\n }\r\n}\r\n//# sourceMappingURL=HttpClient.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// These values are designed to match the ASP.NET Log Levels since that's the pattern we're emulating here.\r\n/** Indicates the severity of a log message.\r\n *\r\n * Log Levels are ordered in increasing severity. So `Debug` is more severe than `Trace`, etc.\r\n */\r\nexport var LogLevel;\r\n(function (LogLevel) {\r\n /** Log level for very low severity diagnostic messages. */\r\n LogLevel[LogLevel[\"Trace\"] = 0] = \"Trace\";\r\n /** Log level for low severity diagnostic messages. */\r\n LogLevel[LogLevel[\"Debug\"] = 1] = \"Debug\";\r\n /** Log level for informational diagnostic messages. */\r\n LogLevel[LogLevel[\"Information\"] = 2] = \"Information\";\r\n /** Log level for diagnostic messages that indicate a non-fatal problem. */\r\n LogLevel[LogLevel[\"Warning\"] = 3] = \"Warning\";\r\n /** Log level for diagnostic messages that indicate a failure in the current operation. */\r\n LogLevel[LogLevel[\"Error\"] = 4] = \"Error\";\r\n /** Log level for diagnostic messages that indicate a failure that will terminate the entire application. */\r\n LogLevel[LogLevel[\"Critical\"] = 5] = \"Critical\";\r\n /** The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted. */\r\n LogLevel[LogLevel[\"None\"] = 6] = \"None\";\r\n})(LogLevel || (LogLevel = {}));\r\n//# sourceMappingURL=ILogger.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** A logger that does nothing when log messages are sent to it. */\r\nexport class NullLogger {\r\n constructor() { }\r\n /** @inheritDoc */\r\n // eslint-disable-next-line\r\n log(_logLevel, _message) {\r\n }\r\n}\r\n/** The singleton instance of the {@link @microsoft/signalr.NullLogger}. */\r\nNullLogger.instance = new NullLogger();\r\n//# sourceMappingURL=Loggers.js.map","export const VERSION = '9.0.6';\r\n//# sourceMappingURL=pkg-version.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { VERSION } from \"./pkg-version\";\r\n// Version token that will be replaced by the prepack command\r\n/** The version of the SignalR client. */\r\nexport { VERSION };\r\n/** @private */\r\nexport class Arg {\r\n static isRequired(val, name) {\r\n if (val === null || val === undefined) {\r\n throw new Error(`The '${name}' argument is required.`);\r\n }\r\n }\r\n static isNotEmpty(val, name) {\r\n if (!val || val.match(/^\\s*$/)) {\r\n throw new Error(`The '${name}' argument should not be empty.`);\r\n }\r\n }\r\n static isIn(val, values, name) {\r\n // TypeScript enums have keys for **both** the name and the value of each enum member on the type itself.\r\n if (!(val in values)) {\r\n throw new Error(`Unknown ${name} value: ${val}.`);\r\n }\r\n }\r\n}\r\n/** @private */\r\nexport class Platform {\r\n // react-native has a window but no document so we should check both\r\n static get isBrowser() {\r\n return !Platform.isNode && typeof window === \"object\" && typeof window.document === \"object\";\r\n }\r\n // WebWorkers don't have a window object so the isBrowser check would fail\r\n static get isWebWorker() {\r\n return !Platform.isNode && typeof self === \"object\" && \"importScripts\" in self;\r\n }\r\n // react-native has a window but no document\r\n static get isReactNative() {\r\n return !Platform.isNode && typeof window === \"object\" && typeof window.document === \"undefined\";\r\n }\r\n // Node apps shouldn't have a window object, but WebWorkers don't either\r\n // so we need to check for both WebWorker and window\r\n static get isNode() {\r\n return typeof process !== \"undefined\" && process.release && process.release.name === \"node\";\r\n }\r\n}\r\n/** @private */\r\nexport function getDataDetail(data, includeContent) {\r\n let detail = \"\";\r\n if (isArrayBuffer(data)) {\r\n detail = `Binary data of length ${data.byteLength}`;\r\n if (includeContent) {\r\n detail += `. Content: '${formatArrayBuffer(data)}'`;\r\n }\r\n }\r\n else if (typeof data === \"string\") {\r\n detail = `String data of length ${data.length}`;\r\n if (includeContent) {\r\n detail += `. Content: '${data}'`;\r\n }\r\n }\r\n return detail;\r\n}\r\n/** @private */\r\nexport function formatArrayBuffer(data) {\r\n const view = new Uint8Array(data);\r\n // Uint8Array.map only supports returning another Uint8Array?\r\n let str = \"\";\r\n view.forEach((num) => {\r\n const pad = num < 16 ? \"0\" : \"\";\r\n str += `0x${pad}${num.toString(16)} `;\r\n });\r\n // Trim of trailing space.\r\n return str.substr(0, str.length - 1);\r\n}\r\n// Also in signalr-protocol-msgpack/Utils.ts\r\n/** @private */\r\nexport function isArrayBuffer(val) {\r\n return val && typeof ArrayBuffer !== \"undefined\" &&\r\n (val instanceof ArrayBuffer ||\r\n // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof\r\n (val.constructor && val.constructor.name === \"ArrayBuffer\"));\r\n}\r\n/** @private */\r\nexport async function sendMessage(logger, transportName, httpClient, url, content, options) {\r\n const headers = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n logger.log(LogLevel.Trace, `(${transportName} transport) sending data. ${getDataDetail(content, options.logMessageContent)}.`);\r\n const responseType = isArrayBuffer(content) ? \"arraybuffer\" : \"text\";\r\n const response = await httpClient.post(url, {\r\n content,\r\n headers: { ...headers, ...options.headers },\r\n responseType,\r\n timeout: options.timeout,\r\n withCredentials: options.withCredentials,\r\n });\r\n logger.log(LogLevel.Trace, `(${transportName} transport) request complete. Response status: ${response.statusCode}.`);\r\n}\r\n/** @private */\r\nexport function createLogger(logger) {\r\n if (logger === undefined) {\r\n return new ConsoleLogger(LogLevel.Information);\r\n }\r\n if (logger === null) {\r\n return NullLogger.instance;\r\n }\r\n if (logger.log !== undefined) {\r\n return logger;\r\n }\r\n return new ConsoleLogger(logger);\r\n}\r\n/** @private */\r\nexport class SubjectSubscription {\r\n constructor(subject, observer) {\r\n this._subject = subject;\r\n this._observer = observer;\r\n }\r\n dispose() {\r\n const index = this._subject.observers.indexOf(this._observer);\r\n if (index > -1) {\r\n this._subject.observers.splice(index, 1);\r\n }\r\n if (this._subject.observers.length === 0 && this._subject.cancelCallback) {\r\n this._subject.cancelCallback().catch((_) => { });\r\n }\r\n }\r\n}\r\n/** @private */\r\nexport class ConsoleLogger {\r\n constructor(minimumLogLevel) {\r\n this._minLevel = minimumLogLevel;\r\n this.out = console;\r\n }\r\n log(logLevel, message) {\r\n if (logLevel >= this._minLevel) {\r\n const msg = `[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`;\r\n switch (logLevel) {\r\n case LogLevel.Critical:\r\n case LogLevel.Error:\r\n this.out.error(msg);\r\n break;\r\n case LogLevel.Warning:\r\n this.out.warn(msg);\r\n break;\r\n case LogLevel.Information:\r\n this.out.info(msg);\r\n break;\r\n default:\r\n // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug\r\n this.out.log(msg);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n/** @private */\r\nexport function getUserAgentHeader() {\r\n let userAgentHeaderName = \"X-SignalR-User-Agent\";\r\n if (Platform.isNode) {\r\n userAgentHeaderName = \"User-Agent\";\r\n }\r\n return [userAgentHeaderName, constructUserAgent(VERSION, getOsName(), getRuntime(), getRuntimeVersion())];\r\n}\r\n/** @private */\r\nexport function constructUserAgent(version, os, runtime, runtimeVersion) {\r\n // Microsoft SignalR/[Version] ([Detailed Version]; [Operating System]; [Runtime]; [Runtime Version])\r\n let userAgent = \"Microsoft SignalR/\";\r\n const majorAndMinor = version.split(\".\");\r\n userAgent += `${majorAndMinor[0]}.${majorAndMinor[1]}`;\r\n userAgent += ` (${version}; `;\r\n if (os && os !== \"\") {\r\n userAgent += `${os}; `;\r\n }\r\n else {\r\n userAgent += \"Unknown OS; \";\r\n }\r\n userAgent += `${runtime}`;\r\n if (runtimeVersion) {\r\n userAgent += `; ${runtimeVersion}`;\r\n }\r\n else {\r\n userAgent += \"; Unknown Runtime Version\";\r\n }\r\n userAgent += \")\";\r\n return userAgent;\r\n}\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getOsName() {\r\n if (Platform.isNode) {\r\n switch (process.platform) {\r\n case \"win32\":\r\n return \"Windows NT\";\r\n case \"darwin\":\r\n return \"macOS\";\r\n case \"linux\":\r\n return \"Linux\";\r\n default:\r\n return process.platform;\r\n }\r\n }\r\n else {\r\n return \"\";\r\n }\r\n}\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getRuntimeVersion() {\r\n if (Platform.isNode) {\r\n return process.versions.node;\r\n }\r\n return undefined;\r\n}\r\nfunction getRuntime() {\r\n if (Platform.isNode) {\r\n return \"NodeJS\";\r\n }\r\n else {\r\n return \"Browser\";\r\n }\r\n}\r\n/** @private */\r\nexport function getErrorString(e) {\r\n if (e.stack) {\r\n return e.stack;\r\n }\r\n else if (e.message) {\r\n return e.message;\r\n }\r\n return `${e}`;\r\n}\r\n/** @private */\r\nexport function getGlobalThis() {\r\n // globalThis is semi-new and not available in Node until v12\r\n if (typeof globalThis !== \"undefined\") {\r\n return globalThis;\r\n }\r\n if (typeof self !== \"undefined\") {\r\n return self;\r\n }\r\n if (typeof window !== \"undefined\") {\r\n return window;\r\n }\r\n if (typeof global !== \"undefined\") {\r\n return global;\r\n }\r\n throw new Error(\"could not find global\");\r\n}\r\n//# sourceMappingURL=Utils.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpResponse } from \"./HttpClient\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { Platform, getGlobalThis, isArrayBuffer } from \"./Utils\";\r\nexport class FetchHttpClient extends HttpClient {\r\n constructor(logger) {\r\n super();\r\n this._logger = logger;\r\n // Node added a fetch implementation to the global scope starting in v18.\r\n // We need to add a cookie jar in node to be able to share cookies with WebSocket\r\n if (typeof fetch === \"undefined\" || Platform.isNode) {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n // Cookies aren't automatically handled in Node so we need to add a CookieJar to preserve cookies across requests\r\n this._jar = new (requireFunc(\"tough-cookie\")).CookieJar();\r\n if (typeof fetch === \"undefined\") {\r\n this._fetchType = requireFunc(\"node-fetch\");\r\n }\r\n else {\r\n // Use fetch from Node if available\r\n this._fetchType = fetch;\r\n }\r\n // node-fetch doesn't have a nice API for getting and setting cookies\r\n // fetch-cookie will wrap a fetch implementation with a default CookieJar or a provided one\r\n this._fetchType = requireFunc(\"fetch-cookie\")(this._fetchType, this._jar);\r\n }\r\n else {\r\n this._fetchType = fetch.bind(getGlobalThis());\r\n }\r\n if (typeof AbortController === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n // Node needs EventListener methods on AbortController which our custom polyfill doesn't provide\r\n this._abortControllerType = requireFunc(\"abort-controller\");\r\n }\r\n else {\r\n this._abortControllerType = AbortController;\r\n }\r\n }\r\n /** @inheritDoc */\r\n async send(request) {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n throw new AbortError();\r\n }\r\n if (!request.method) {\r\n throw new Error(\"No method defined.\");\r\n }\r\n if (!request.url) {\r\n throw new Error(\"No url defined.\");\r\n }\r\n const abortController = new this._abortControllerType();\r\n let error;\r\n // Hook our abortSignal into the abort controller\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n abortController.abort();\r\n error = new AbortError();\r\n };\r\n }\r\n // If a timeout has been passed in, setup a timeout to call abort\r\n // Type needs to be any to fit window.setTimeout and NodeJS.setTimeout\r\n let timeoutId = null;\r\n if (request.timeout) {\r\n const msTimeout = request.timeout;\r\n timeoutId = setTimeout(() => {\r\n abortController.abort();\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n error = new TimeoutError();\r\n }, msTimeout);\r\n }\r\n if (request.content === \"\") {\r\n request.content = undefined;\r\n }\r\n if (request.content) {\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n request.headers = request.headers || {};\r\n if (isArrayBuffer(request.content)) {\r\n request.headers[\"Content-Type\"] = \"application/octet-stream\";\r\n }\r\n else {\r\n request.headers[\"Content-Type\"] = \"text/plain;charset=UTF-8\";\r\n }\r\n }\r\n let response;\r\n try {\r\n response = await this._fetchType(request.url, {\r\n body: request.content,\r\n cache: \"no-cache\",\r\n credentials: request.withCredentials === true ? \"include\" : \"same-origin\",\r\n headers: {\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n ...request.headers,\r\n },\r\n method: request.method,\r\n mode: \"cors\",\r\n redirect: \"follow\",\r\n signal: abortController.signal,\r\n });\r\n }\r\n catch (e) {\r\n if (error) {\r\n throw error;\r\n }\r\n this._logger.log(LogLevel.Warning, `Error from HTTP request. ${e}.`);\r\n throw e;\r\n }\r\n finally {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n }\r\n if (!response.ok) {\r\n const errorMessage = await deserializeContent(response, \"text\");\r\n throw new HttpError(errorMessage || response.statusText, response.status);\r\n }\r\n const content = deserializeContent(response, request.responseType);\r\n const payload = await content;\r\n return new HttpResponse(response.status, response.statusText, payload);\r\n }\r\n getCookieString(url) {\r\n let cookies = \"\";\r\n if (Platform.isNode && this._jar) {\r\n // @ts-ignore: unused variable\r\n this._jar.getCookies(url, (e, c) => cookies = c.join(\"; \"));\r\n }\r\n return cookies;\r\n }\r\n}\r\nfunction deserializeContent(response, responseType) {\r\n let content;\r\n switch (responseType) {\r\n case \"arraybuffer\":\r\n content = response.arrayBuffer();\r\n break;\r\n case \"text\":\r\n content = response.text();\r\n break;\r\n case \"blob\":\r\n case \"document\":\r\n case \"json\":\r\n throw new Error(`${responseType} is not supported.`);\r\n default:\r\n content = response.text();\r\n break;\r\n }\r\n return content;\r\n}\r\n//# sourceMappingURL=FetchHttpClient.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpResponse } from \"./HttpClient\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\nexport class XhrHttpClient extends HttpClient {\r\n constructor(logger) {\r\n super();\r\n this._logger = logger;\r\n }\r\n /** @inheritDoc */\r\n send(request) {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(request.method, request.url, true);\r\n xhr.withCredentials = request.withCredentials === undefined ? true : request.withCredentials;\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n if (request.content === \"\") {\r\n request.content = undefined;\r\n }\r\n if (request.content) {\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n if (isArrayBuffer(request.content)) {\r\n xhr.setRequestHeader(\"Content-Type\", \"application/octet-stream\");\r\n }\r\n else {\r\n xhr.setRequestHeader(\"Content-Type\", \"text/plain;charset=UTF-8\");\r\n }\r\n }\r\n const headers = request.headers;\r\n if (headers) {\r\n Object.keys(headers)\r\n .forEach((header) => {\r\n xhr.setRequestHeader(header, headers[header]);\r\n });\r\n }\r\n if (request.responseType) {\r\n xhr.responseType = request.responseType;\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n xhr.abort();\r\n reject(new AbortError());\r\n };\r\n }\r\n if (request.timeout) {\r\n xhr.timeout = request.timeout;\r\n }\r\n xhr.onload = () => {\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(new HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));\r\n }\r\n else {\r\n reject(new HttpError(xhr.response || xhr.responseText || xhr.statusText, xhr.status));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n this._logger.log(LogLevel.Warning, `Error from HTTP request. ${xhr.status}: ${xhr.statusText}.`);\r\n reject(new HttpError(xhr.statusText, xhr.status));\r\n };\r\n xhr.ontimeout = () => {\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n reject(new TimeoutError());\r\n };\r\n xhr.send(request.content);\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=XhrHttpClient.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortError } from \"./Errors\";\r\nimport { FetchHttpClient } from \"./FetchHttpClient\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { Platform } from \"./Utils\";\r\nimport { XhrHttpClient } from \"./XhrHttpClient\";\r\n/** Default implementation of {@link @microsoft/signalr.HttpClient}. */\r\nexport class DefaultHttpClient extends HttpClient {\r\n /** Creates a new instance of the {@link @microsoft/signalr.DefaultHttpClient}, using the provided {@link @microsoft/signalr.ILogger} to log messages. */\r\n constructor(logger) {\r\n super();\r\n if (typeof fetch !== \"undefined\" || Platform.isNode) {\r\n this._httpClient = new FetchHttpClient(logger);\r\n }\r\n else if (typeof XMLHttpRequest !== \"undefined\") {\r\n this._httpClient = new XhrHttpClient(logger);\r\n }\r\n else {\r\n throw new Error(\"No usable HttpClient found.\");\r\n }\r\n }\r\n /** @inheritDoc */\r\n send(request) {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n return this._httpClient.send(request);\r\n }\r\n getCookieString(url) {\r\n return this._httpClient.getCookieString(url);\r\n }\r\n}\r\n//# sourceMappingURL=DefaultHttpClient.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// Not exported from index\r\n/** @private */\r\nexport class TextMessageFormat {\r\n static write(output) {\r\n return `${output}${TextMessageFormat.RecordSeparator}`;\r\n }\r\n static parse(input) {\r\n if (input[input.length - 1] !== TextMessageFormat.RecordSeparator) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n const messages = input.split(TextMessageFormat.RecordSeparator);\r\n messages.pop();\r\n return messages;\r\n }\r\n}\r\nTextMessageFormat.RecordSeparatorCode = 0x1e;\r\nTextMessageFormat.RecordSeparator = String.fromCharCode(TextMessageFormat.RecordSeparatorCode);\r\n//# sourceMappingURL=TextMessageFormat.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n/** @private */\r\nexport class HandshakeProtocol {\r\n // Handshake request is always JSON\r\n writeHandshakeRequest(handshakeRequest) {\r\n return TextMessageFormat.write(JSON.stringify(handshakeRequest));\r\n }\r\n parseHandshakeResponse(data) {\r\n let messageData;\r\n let remainingData;\r\n if (isArrayBuffer(data)) {\r\n // Format is binary but still need to read JSON text from handshake response\r\n const binaryData = new Uint8Array(data);\r\n const separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = String.fromCharCode.apply(null, Array.prototype.slice.call(binaryData.slice(0, responseLength)));\r\n remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;\r\n }\r\n else {\r\n const textData = data;\r\n const separatorIndex = textData.indexOf(TextMessageFormat.RecordSeparator);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = textData.substring(0, responseLength);\r\n remainingData = (textData.length > responseLength) ? textData.substring(responseLength) : null;\r\n }\r\n // At this point we should have just the single handshake message\r\n const messages = TextMessageFormat.parse(messageData);\r\n const response = JSON.parse(messages[0]);\r\n if (response.type) {\r\n throw new Error(\"Expected a handshake response from the server.\");\r\n }\r\n const responseMessage = response;\r\n // multiple messages could have arrived with handshake\r\n // return additional data to be parsed as usual, or null if all parsed\r\n return [remainingData, responseMessage];\r\n }\r\n}\r\n//# sourceMappingURL=HandshakeProtocol.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** Defines the type of a Hub Message. */\r\nexport var MessageType;\r\n(function (MessageType) {\r\n /** Indicates the message is an Invocation message and implements the {@link @microsoft/signalr.InvocationMessage} interface. */\r\n MessageType[MessageType[\"Invocation\"] = 1] = \"Invocation\";\r\n /** Indicates the message is a StreamItem message and implements the {@link @microsoft/signalr.StreamItemMessage} interface. */\r\n MessageType[MessageType[\"StreamItem\"] = 2] = \"StreamItem\";\r\n /** Indicates the message is a Completion message and implements the {@link @microsoft/signalr.CompletionMessage} interface. */\r\n MessageType[MessageType[\"Completion\"] = 3] = \"Completion\";\r\n /** Indicates the message is a Stream Invocation message and implements the {@link @microsoft/signalr.StreamInvocationMessage} interface. */\r\n MessageType[MessageType[\"StreamInvocation\"] = 4] = \"StreamInvocation\";\r\n /** Indicates the message is a Cancel Invocation message and implements the {@link @microsoft/signalr.CancelInvocationMessage} interface. */\r\n MessageType[MessageType[\"CancelInvocation\"] = 5] = \"CancelInvocation\";\r\n /** Indicates the message is a Ping message and implements the {@link @microsoft/signalr.PingMessage} interface. */\r\n MessageType[MessageType[\"Ping\"] = 6] = \"Ping\";\r\n /** Indicates the message is a Close message and implements the {@link @microsoft/signalr.CloseMessage} interface. */\r\n MessageType[MessageType[\"Close\"] = 7] = \"Close\";\r\n MessageType[MessageType[\"Ack\"] = 8] = \"Ack\";\r\n MessageType[MessageType[\"Sequence\"] = 9] = \"Sequence\";\r\n})(MessageType || (MessageType = {}));\r\n//# sourceMappingURL=IHubProtocol.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { SubjectSubscription } from \"./Utils\";\r\n/** Stream implementation to stream items to the server. */\r\nexport class Subject {\r\n constructor() {\r\n this.observers = [];\r\n }\r\n next(item) {\r\n for (const observer of this.observers) {\r\n observer.next(item);\r\n }\r\n }\r\n error(err) {\r\n for (const observer of this.observers) {\r\n if (observer.error) {\r\n observer.error(err);\r\n }\r\n }\r\n }\r\n complete() {\r\n for (const observer of this.observers) {\r\n if (observer.complete) {\r\n observer.complete();\r\n }\r\n }\r\n }\r\n subscribe(observer) {\r\n this.observers.push(observer);\r\n return new SubjectSubscription(this, observer);\r\n }\r\n}\r\n//# sourceMappingURL=Subject.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { MessageType } from \"./IHubProtocol\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n/** @private */\r\nexport class MessageBuffer {\r\n constructor(protocol, connection, bufferSize) {\r\n this._bufferSize = 100000;\r\n this._messages = [];\r\n this._totalMessageCount = 0;\r\n this._waitForSequenceMessage = false;\r\n // Message IDs start at 1 and always increment by 1\r\n this._nextReceivingSequenceId = 1;\r\n this._latestReceivedSequenceId = 0;\r\n this._bufferedByteCount = 0;\r\n this._reconnectInProgress = false;\r\n this._protocol = protocol;\r\n this._connection = connection;\r\n this._bufferSize = bufferSize;\r\n }\r\n async _send(message) {\r\n const serializedMessage = this._protocol.writeMessage(message);\r\n let backpressurePromise = Promise.resolve();\r\n // Only count invocation messages. Acks, pings, etc. don't need to be resent on reconnect\r\n if (this._isInvocationMessage(message)) {\r\n this._totalMessageCount++;\r\n let backpressurePromiseResolver = () => { };\r\n let backpressurePromiseRejector = () => { };\r\n if (isArrayBuffer(serializedMessage)) {\r\n this._bufferedByteCount += serializedMessage.byteLength;\r\n }\r\n else {\r\n this._bufferedByteCount += serializedMessage.length;\r\n }\r\n if (this._bufferedByteCount >= this._bufferSize) {\r\n backpressurePromise = new Promise((resolve, reject) => {\r\n backpressurePromiseResolver = resolve;\r\n backpressurePromiseRejector = reject;\r\n });\r\n }\r\n this._messages.push(new BufferedItem(serializedMessage, this._totalMessageCount, backpressurePromiseResolver, backpressurePromiseRejector));\r\n }\r\n try {\r\n // If this is set it means we are reconnecting or resending\r\n // We don't want to send on a disconnected connection\r\n // And we don't want to send if resend is running since that would mean sending\r\n // this message twice\r\n if (!this._reconnectInProgress) {\r\n await this._connection.send(serializedMessage);\r\n }\r\n }\r\n catch {\r\n this._disconnected();\r\n }\r\n await backpressurePromise;\r\n }\r\n _ack(ackMessage) {\r\n let newestAckedMessage = -1;\r\n // Find index of newest message being acked\r\n for (let index = 0; index < this._messages.length; index++) {\r\n const element = this._messages[index];\r\n if (element._id <= ackMessage.sequenceId) {\r\n newestAckedMessage = index;\r\n if (isArrayBuffer(element._message)) {\r\n this._bufferedByteCount -= element._message.byteLength;\r\n }\r\n else {\r\n this._bufferedByteCount -= element._message.length;\r\n }\r\n // resolve items that have already been sent and acked\r\n element._resolver();\r\n }\r\n else if (this._bufferedByteCount < this._bufferSize) {\r\n // resolve items that now fall under the buffer limit but haven't been acked\r\n element._resolver();\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n if (newestAckedMessage !== -1) {\r\n // We're removing everything including the message pointed to, so add 1\r\n this._messages = this._messages.slice(newestAckedMessage + 1);\r\n }\r\n }\r\n _shouldProcessMessage(message) {\r\n if (this._waitForSequenceMessage) {\r\n if (message.type !== MessageType.Sequence) {\r\n return false;\r\n }\r\n else {\r\n this._waitForSequenceMessage = false;\r\n return true;\r\n }\r\n }\r\n // No special processing for acks, pings, etc.\r\n if (!this._isInvocationMessage(message)) {\r\n return true;\r\n }\r\n const currentId = this._nextReceivingSequenceId;\r\n this._nextReceivingSequenceId++;\r\n if (currentId <= this._latestReceivedSequenceId) {\r\n if (currentId === this._latestReceivedSequenceId) {\r\n // Should only hit this if we just reconnected and the server is sending\r\n // Messages it has buffered, which would mean it hasn't seen an Ack for these messages\r\n this._ackTimer();\r\n }\r\n // Ignore, this is a duplicate message\r\n return false;\r\n }\r\n this._latestReceivedSequenceId = currentId;\r\n // Only start the timer for sending an Ack message when we have a message to ack. This also conveniently solves\r\n // timer throttling by not having a recursive timer, and by starting the timer via a network call (recv)\r\n this._ackTimer();\r\n return true;\r\n }\r\n _resetSequence(message) {\r\n if (message.sequenceId > this._nextReceivingSequenceId) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._connection.stop(new Error(\"Sequence ID greater than amount of messages we've received.\"));\r\n return;\r\n }\r\n this._nextReceivingSequenceId = message.sequenceId;\r\n }\r\n _disconnected() {\r\n this._reconnectInProgress = true;\r\n this._waitForSequenceMessage = true;\r\n }\r\n async _resend() {\r\n const sequenceId = this._messages.length !== 0\r\n ? this._messages[0]._id\r\n : this._totalMessageCount + 1;\r\n await this._connection.send(this._protocol.writeMessage({ type: MessageType.Sequence, sequenceId }));\r\n // Get a local variable to the _messages, just in case messages are acked while resending\r\n // Which would slice the _messages array (which creates a new copy)\r\n const messages = this._messages;\r\n for (const element of messages) {\r\n await this._connection.send(element._message);\r\n }\r\n this._reconnectInProgress = false;\r\n }\r\n _dispose(error) {\r\n error !== null && error !== void 0 ? error : (error = new Error(\"Unable to reconnect to server.\"));\r\n // Unblock backpressure if any\r\n for (const element of this._messages) {\r\n element._rejector(error);\r\n }\r\n }\r\n _isInvocationMessage(message) {\r\n // There is no way to check if something implements an interface.\r\n // So we individually check the messages in a switch statement.\r\n // To make sure we don't miss any message types we rely on the compiler\r\n // seeing the function returns a value and it will do the\r\n // exhaustive check for us on the switch statement, since we don't use 'case default'\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n case MessageType.StreamItem:\r\n case MessageType.Completion:\r\n case MessageType.StreamInvocation:\r\n case MessageType.CancelInvocation:\r\n return true;\r\n case MessageType.Close:\r\n case MessageType.Sequence:\r\n case MessageType.Ping:\r\n case MessageType.Ack:\r\n return false;\r\n }\r\n }\r\n _ackTimer() {\r\n if (this._ackTimerHandle === undefined) {\r\n this._ackTimerHandle = setTimeout(async () => {\r\n try {\r\n if (!this._reconnectInProgress) {\r\n await this._connection.send(this._protocol.writeMessage({ type: MessageType.Ack, sequenceId: this._latestReceivedSequenceId }));\r\n }\r\n // Ignore errors, that means the connection is closed and we don't care about the Ack message anymore.\r\n }\r\n catch { }\r\n clearTimeout(this._ackTimerHandle);\r\n this._ackTimerHandle = undefined;\r\n // 1 second delay so we don't spam Ack messages if there are many messages being received at once.\r\n }, 1000);\r\n }\r\n }\r\n}\r\nclass BufferedItem {\r\n constructor(message, id, resolver, rejector) {\r\n this._message = message;\r\n this._id = id;\r\n this._resolver = resolver;\r\n this._rejector = rejector;\r\n }\r\n}\r\n//# sourceMappingURL=MessageBuffer.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { HandshakeProtocol } from \"./HandshakeProtocol\";\r\nimport { AbortError } from \"./Errors\";\r\nimport { MessageType } from \"./IHubProtocol\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { Subject } from \"./Subject\";\r\nimport { Arg, getErrorString, Platform } from \"./Utils\";\r\nimport { MessageBuffer } from \"./MessageBuffer\";\r\nconst DEFAULT_TIMEOUT_IN_MS = 30 * 1000;\r\nconst DEFAULT_PING_INTERVAL_IN_MS = 15 * 1000;\r\nconst DEFAULT_STATEFUL_RECONNECT_BUFFER_SIZE = 100000;\r\n/** Describes the current state of the {@link HubConnection} to the server. */\r\nexport var HubConnectionState;\r\n(function (HubConnectionState) {\r\n /** The hub connection is disconnected. */\r\n HubConnectionState[\"Disconnected\"] = \"Disconnected\";\r\n /** The hub connection is connecting. */\r\n HubConnectionState[\"Connecting\"] = \"Connecting\";\r\n /** The hub connection is connected. */\r\n HubConnectionState[\"Connected\"] = \"Connected\";\r\n /** The hub connection is disconnecting. */\r\n HubConnectionState[\"Disconnecting\"] = \"Disconnecting\";\r\n /** The hub connection is reconnecting. */\r\n HubConnectionState[\"Reconnecting\"] = \"Reconnecting\";\r\n})(HubConnectionState || (HubConnectionState = {}));\r\n/** Represents a connection to a SignalR Hub. */\r\nexport class HubConnection {\r\n /** @internal */\r\n // Using a public static factory method means we can have a private constructor and an _internal_\r\n // create method that can be used by HubConnectionBuilder. An \"internal\" constructor would just\r\n // be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a\r\n // public parameter-less constructor.\r\n static create(connection, logger, protocol, reconnectPolicy, serverTimeoutInMilliseconds, keepAliveIntervalInMilliseconds, statefulReconnectBufferSize) {\r\n return new HubConnection(connection, logger, protocol, reconnectPolicy, serverTimeoutInMilliseconds, keepAliveIntervalInMilliseconds, statefulReconnectBufferSize);\r\n }\r\n constructor(connection, logger, protocol, reconnectPolicy, serverTimeoutInMilliseconds, keepAliveIntervalInMilliseconds, statefulReconnectBufferSize) {\r\n this._nextKeepAlive = 0;\r\n this._freezeEventListener = () => {\r\n this._logger.log(LogLevel.Warning, \"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://learn.microsoft.com/aspnet/core/signalr/javascript-client#bsleep\");\r\n };\r\n Arg.isRequired(connection, \"connection\");\r\n Arg.isRequired(logger, \"logger\");\r\n Arg.isRequired(protocol, \"protocol\");\r\n this.serverTimeoutInMilliseconds = serverTimeoutInMilliseconds !== null && serverTimeoutInMilliseconds !== void 0 ? serverTimeoutInMilliseconds : DEFAULT_TIMEOUT_IN_MS;\r\n this.keepAliveIntervalInMilliseconds = keepAliveIntervalInMilliseconds !== null && keepAliveIntervalInMilliseconds !== void 0 ? keepAliveIntervalInMilliseconds : DEFAULT_PING_INTERVAL_IN_MS;\r\n this._statefulReconnectBufferSize = statefulReconnectBufferSize !== null && statefulReconnectBufferSize !== void 0 ? statefulReconnectBufferSize : DEFAULT_STATEFUL_RECONNECT_BUFFER_SIZE;\r\n this._logger = logger;\r\n this._protocol = protocol;\r\n this.connection = connection;\r\n this._reconnectPolicy = reconnectPolicy;\r\n this._handshakeProtocol = new HandshakeProtocol();\r\n this.connection.onreceive = (data) => this._processIncomingData(data);\r\n this.connection.onclose = (error) => this._connectionClosed(error);\r\n this._callbacks = {};\r\n this._methods = {};\r\n this._closedCallbacks = [];\r\n this._reconnectingCallbacks = [];\r\n this._reconnectedCallbacks = [];\r\n this._invocationId = 0;\r\n this._receivedHandshakeResponse = false;\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n this._cachedPingMessage = this._protocol.writeMessage({ type: MessageType.Ping });\r\n }\r\n /** Indicates the state of the {@link HubConnection} to the server. */\r\n get state() {\r\n return this._connectionState;\r\n }\r\n /** Represents the connection id of the {@link HubConnection} on the server. The connection id will be null when the connection is either\r\n * in the disconnected state or if the negotiation step was skipped.\r\n */\r\n get connectionId() {\r\n return this.connection ? (this.connection.connectionId || null) : null;\r\n }\r\n /** Indicates the url of the {@link HubConnection} to the server. */\r\n get baseUrl() {\r\n return this.connection.baseUrl || \"\";\r\n }\r\n /**\r\n * Sets a new url for the HubConnection. Note that the url can only be changed when the connection is in either the Disconnected or\r\n * Reconnecting states.\r\n * @param {string} url The url to connect to.\r\n */\r\n set baseUrl(url) {\r\n if (this._connectionState !== HubConnectionState.Disconnected && this._connectionState !== HubConnectionState.Reconnecting) {\r\n throw new Error(\"The HubConnection must be in the Disconnected or Reconnecting state to change the url.\");\r\n }\r\n if (!url) {\r\n throw new Error(\"The HubConnection url must be a valid url.\");\r\n }\r\n this.connection.baseUrl = url;\r\n }\r\n /** Starts the connection.\r\n *\r\n * @returns {Promise<void>} A Promise that resolves when the connection has been successfully established, or rejects with an error.\r\n */\r\n start() {\r\n this._startPromise = this._startWithStateTransitions();\r\n return this._startPromise;\r\n }\r\n async _startWithStateTransitions() {\r\n if (this._connectionState !== HubConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start a HubConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n this._connectionState = HubConnectionState.Connecting;\r\n this._logger.log(LogLevel.Debug, \"Starting HubConnection.\");\r\n try {\r\n await this._startInternal();\r\n if (Platform.isBrowser) {\r\n // Log when the browser freezes the tab so users know why their connection unexpectedly stopped working\r\n window.document.addEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n this._connectionState = HubConnectionState.Connected;\r\n this._connectionStarted = true;\r\n this._logger.log(LogLevel.Debug, \"HubConnection connected successfully.\");\r\n }\r\n catch (e) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._logger.log(LogLevel.Debug, `HubConnection failed to start successfully because of error '${e}'.`);\r\n return Promise.reject(e);\r\n }\r\n }\r\n async _startInternal() {\r\n this._stopDuringStartError = undefined;\r\n this._receivedHandshakeResponse = false;\r\n // Set up the promise before any connection is (re)started otherwise it could race with received messages\r\n const handshakePromise = new Promise((resolve, reject) => {\r\n this._handshakeResolver = resolve;\r\n this._handshakeRejecter = reject;\r\n });\r\n await this.connection.start(this._protocol.transferFormat);\r\n try {\r\n let version = this._protocol.version;\r\n if (!this.connection.features.reconnect) {\r\n // Stateful Reconnect starts with HubProtocol version 2, newer clients connecting to older servers will fail to connect due to\r\n // the handshake only supporting version 1, so we will try to send version 1 during the handshake to keep old servers working.\r\n version = 1;\r\n }\r\n const handshakeRequest = {\r\n protocol: this._protocol.name,\r\n version,\r\n };\r\n this._logger.log(LogLevel.Debug, \"Sending handshake request.\");\r\n await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(handshakeRequest));\r\n this._logger.log(LogLevel.Information, `Using HubProtocol '${this._protocol.name}'.`);\r\n // defensively cleanup timeout in case we receive a message from the server before we finish start\r\n this._cleanupTimeout();\r\n this._resetTimeoutPeriod();\r\n this._resetKeepAliveInterval();\r\n await handshakePromise;\r\n // It's important to check the stopDuringStartError instead of just relying on the handshakePromise\r\n // being rejected on close, because this continuation can run after both the handshake completed successfully\r\n // and the connection was closed.\r\n if (this._stopDuringStartError) {\r\n // It's important to throw instead of returning a rejected promise, because we don't want to allow any state\r\n // transitions to occur between now and the calling code observing the exceptions. Returning a rejected promise\r\n // will cause the calling continuation to get scheduled to run later.\r\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\r\n throw this._stopDuringStartError;\r\n }\r\n const useStatefulReconnect = this.connection.features.reconnect || false;\r\n if (useStatefulReconnect) {\r\n this._messageBuffer = new MessageBuffer(this._protocol, this.connection, this._statefulReconnectBufferSize);\r\n this.connection.features.disconnected = this._messageBuffer._disconnected.bind(this._messageBuffer);\r\n this.connection.features.resend = () => {\r\n if (this._messageBuffer) {\r\n return this._messageBuffer._resend();\r\n }\r\n };\r\n }\r\n if (!this.connection.features.inherentKeepAlive) {\r\n await this._sendMessage(this._cachedPingMessage);\r\n }\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Debug, `Hub handshake failed with error '${e}' during start(). Stopping HubConnection.`);\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n // HttpConnection.stop() should not complete until after the onclose callback is invoked.\r\n // This will transition the HubConnection to the disconnected state before HttpConnection.stop() completes.\r\n await this.connection.stop(e);\r\n throw e;\r\n }\r\n }\r\n /** Stops the connection.\r\n *\r\n * @returns {Promise<void>} A Promise that resolves when the connection has been successfully terminated, or rejects with an error.\r\n */\r\n async stop() {\r\n // Capture the start promise before the connection might be restarted in an onclose callback.\r\n const startPromise = this._startPromise;\r\n this.connection.features.reconnect = false;\r\n this._stopPromise = this._stopInternal();\r\n await this._stopPromise;\r\n try {\r\n // Awaiting undefined continues immediately\r\n await startPromise;\r\n }\r\n catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n }\r\n _stopInternal(error) {\r\n if (this._connectionState === HubConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HubConnection.stop(${error}) ignored because it is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise;\r\n }\r\n const state = this._connectionState;\r\n this._connectionState = HubConnectionState.Disconnecting;\r\n this._logger.log(LogLevel.Debug, \"Stopping HubConnection.\");\r\n if (this._reconnectDelayHandle) {\r\n // We're in a reconnect delay which means the underlying connection is currently already stopped.\r\n // Just clear the handle to stop the reconnect loop (which no one is waiting on thankfully) and\r\n // fire the onclose callbacks.\r\n this._logger.log(LogLevel.Debug, \"Connection stopped during reconnect delay. Done reconnecting.\");\r\n clearTimeout(this._reconnectDelayHandle);\r\n this._reconnectDelayHandle = undefined;\r\n this._completeClose();\r\n return Promise.resolve();\r\n }\r\n if (state === HubConnectionState.Connected) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._sendCloseMessage();\r\n }\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n this._stopDuringStartError = error || new AbortError(\"The connection was stopped before the hub handshake could complete.\");\r\n // HttpConnection.stop() should not complete until after either HttpConnection.start() fails\r\n // or the onclose callback is invoked. The onclose callback will transition the HubConnection\r\n // to the disconnected state if need be before HttpConnection.stop() completes.\r\n return this.connection.stop(error);\r\n }\r\n async _sendCloseMessage() {\r\n try {\r\n await this._sendWithProtocol(this._createCloseMessage());\r\n }\r\n catch {\r\n // Ignore, this is a best effort attempt to let the server know the client closed gracefully.\r\n }\r\n }\r\n /** Invokes a streaming hub method on the server using the specified name and arguments.\r\n *\r\n * @typeparam T The type of the items returned by the server.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {IStreamResult<T>} An object that yields results from the server as they are received.\r\n */\r\n stream(methodName, ...args) {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createStreamInvocation(methodName, args, streamIds);\r\n // eslint-disable-next-line prefer-const\r\n let promiseQueue;\r\n const subject = new Subject();\r\n subject.cancelCallback = () => {\r\n const cancelInvocation = this._createCancelInvocation(invocationDescriptor.invocationId);\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n return promiseQueue.then(() => {\r\n return this._sendWithProtocol(cancelInvocation);\r\n });\r\n };\r\n this._callbacks[invocationDescriptor.invocationId] = (invocationEvent, error) => {\r\n if (error) {\r\n subject.error(error);\r\n return;\r\n }\r\n else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n subject.error(new Error(invocationEvent.error));\r\n }\r\n else {\r\n subject.complete();\r\n }\r\n }\r\n else {\r\n subject.next((invocationEvent.item));\r\n }\r\n }\r\n };\r\n promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n subject.error(e);\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n });\r\n this._launchStreams(streams, promiseQueue);\r\n return subject;\r\n }\r\n _sendMessage(message) {\r\n this._resetKeepAliveInterval();\r\n return this.connection.send(message);\r\n }\r\n /**\r\n * Sends a js object to the server.\r\n * @param message The js object to serialize and send.\r\n */\r\n _sendWithProtocol(message) {\r\n if (this._messageBuffer) {\r\n return this._messageBuffer._send(message);\r\n }\r\n else {\r\n return this._sendMessage(this._protocol.writeMessage(message));\r\n }\r\n }\r\n /** Invokes a hub method on the server using the specified name and arguments. Does not wait for a response from the receiver.\r\n *\r\n * The Promise returned by this method resolves when the client has sent the invocation to the server. The server may still\r\n * be processing the invocation.\r\n *\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise<void>} A Promise that resolves when the invocation has been successfully sent, or rejects with an error.\r\n */\r\n send(methodName, ...args) {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const sendPromise = this._sendWithProtocol(this._createInvocation(methodName, args, true, streamIds));\r\n this._launchStreams(streams, sendPromise);\r\n return sendPromise;\r\n }\r\n /** Invokes a hub method on the server using the specified name and arguments.\r\n *\r\n * The Promise returned by this method resolves when the server indicates it has finished invoking the method. When the promise\r\n * resolves, the server has finished invoking the method. If the server method returns a result, it is produced as the result of\r\n * resolving the Promise.\r\n *\r\n * @typeparam T The expected return type.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise<T>} A Promise that resolves with the result of the server method (if any), or rejects with an error.\r\n */\r\n invoke(methodName, ...args) {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createInvocation(methodName, args, false, streamIds);\r\n const p = new Promise((resolve, reject) => {\r\n // invocationId will always have a value for a non-blocking invocation\r\n this._callbacks[invocationDescriptor.invocationId] = (invocationEvent, error) => {\r\n if (error) {\r\n reject(error);\r\n return;\r\n }\r\n else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n reject(new Error(invocationEvent.error));\r\n }\r\n else {\r\n resolve(invocationEvent.result);\r\n }\r\n }\r\n else {\r\n reject(new Error(`Unexpected message type: ${invocationEvent.type}`));\r\n }\r\n }\r\n };\r\n const promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n reject(e);\r\n // invocationId will always have a value for a non-blocking invocation\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n });\r\n this._launchStreams(streams, promiseQueue);\r\n });\r\n return p;\r\n }\r\n on(methodName, newMethod) {\r\n if (!methodName || !newMethod) {\r\n return;\r\n }\r\n methodName = methodName.toLowerCase();\r\n if (!this._methods[methodName]) {\r\n this._methods[methodName] = [];\r\n }\r\n // Preventing adding the same handler multiple times.\r\n if (this._methods[methodName].indexOf(newMethod) !== -1) {\r\n return;\r\n }\r\n this._methods[methodName].push(newMethod);\r\n }\r\n off(methodName, method) {\r\n if (!methodName) {\r\n return;\r\n }\r\n methodName = methodName.toLowerCase();\r\n const handlers = this._methods[methodName];\r\n if (!handlers) {\r\n return;\r\n }\r\n if (method) {\r\n const removeIdx = handlers.indexOf(method);\r\n if (removeIdx !== -1) {\r\n handlers.splice(removeIdx, 1);\r\n if (handlers.length === 0) {\r\n delete this._methods[methodName];\r\n }\r\n }\r\n }\r\n else {\r\n delete this._methods[methodName];\r\n }\r\n }\r\n /** Registers a handler that will be invoked when the connection is closed.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection is closed. Optionally receives a single argument containing the error that caused the connection to close (if any).\r\n */\r\n onclose(callback) {\r\n if (callback) {\r\n this._closedCallbacks.push(callback);\r\n }\r\n }\r\n /** Registers a handler that will be invoked when the connection starts reconnecting.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection starts reconnecting. Optionally receives a single argument containing the error that caused the connection to start reconnecting (if any).\r\n */\r\n onreconnecting(callback) {\r\n if (callback) {\r\n this._reconnectingCallbacks.push(callback);\r\n }\r\n }\r\n /** Registers a handler that will be invoked when the connection successfully reconnects.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection successfully reconnects.\r\n */\r\n onreconnected(callback) {\r\n if (callback) {\r\n this._reconnectedCallbacks.push(callback);\r\n }\r\n }\r\n _processIncomingData(data) {\r\n this._cleanupTimeout();\r\n if (!this._receivedHandshakeResponse) {\r\n data = this._processHandshakeResponse(data);\r\n this._receivedHandshakeResponse = true;\r\n }\r\n // Data may have all been read when processing handshake response\r\n if (data) {\r\n // Parse the messages\r\n const messages = this._protocol.parseMessages(data, this._logger);\r\n for (const message of messages) {\r\n if (this._messageBuffer && !this._messageBuffer._shouldProcessMessage(message)) {\r\n // Don't process the message, we are either waiting for a SequenceMessage or received a duplicate message\r\n continue;\r\n }\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n this._invokeClientMethod(message)\r\n .catch((e) => {\r\n this._logger.log(LogLevel.Error, `Invoke client method threw error: ${getErrorString(e)}`);\r\n });\r\n break;\r\n case MessageType.StreamItem:\r\n case MessageType.Completion: {\r\n const callback = this._callbacks[message.invocationId];\r\n if (callback) {\r\n if (message.type === MessageType.Completion) {\r\n delete this._callbacks[message.invocationId];\r\n }\r\n try {\r\n callback(message);\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream callback threw error: ${getErrorString(e)}`);\r\n }\r\n }\r\n break;\r\n }\r\n case MessageType.Ping:\r\n // Don't care about pings\r\n break;\r\n case MessageType.Close: {\r\n this._logger.log(LogLevel.Information, \"Close message received from server.\");\r\n const error = message.error ? new Error(\"Server returned an error on close: \" + message.error) : undefined;\r\n if (message.allowReconnect === true) {\r\n // It feels wrong not to await connection.stop() here, but processIncomingData is called as part of an onreceive callback which is not async,\r\n // this is already the behavior for serverTimeout(), and HttpConnection.Stop() should catch and log all possible exceptions.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(error);\r\n }\r\n else {\r\n // We cannot await stopInternal() here, but subsequent calls to stop() will await this if stopInternal() is still ongoing.\r\n this._stopPromise = this._stopInternal(error);\r\n }\r\n break;\r\n }\r\n case MessageType.Ack:\r\n if (this._messageBuffer) {\r\n this._messageBuffer._ack(message);\r\n }\r\n break;\r\n case MessageType.Sequence:\r\n if (this._messageBuffer) {\r\n this._messageBuffer._resetSequence(message);\r\n }\r\n break;\r\n default:\r\n this._logger.log(LogLevel.Warning, `Invalid message type: ${message.type}.`);\r\n break;\r\n }\r\n }\r\n }\r\n this._resetTimeoutPeriod();\r\n }\r\n _processHandshakeResponse(data) {\r\n let responseMessage;\r\n let remainingData;\r\n try {\r\n [remainingData, responseMessage] = this._handshakeProtocol.parseHandshakeResponse(data);\r\n }\r\n catch (e) {\r\n const message = \"Error parsing handshake response: \" + e;\r\n this._logger.log(LogLevel.Error, message);\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n }\r\n if (responseMessage.error) {\r\n const message = \"Server returned handshake error: \" + responseMessage.error;\r\n this._logger.log(LogLevel.Error, message);\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, \"Server handshake complete.\");\r\n }\r\n this._handshakeResolver();\r\n return remainingData;\r\n }\r\n _resetKeepAliveInterval() {\r\n if (this.connection.features.inherentKeepAlive) {\r\n return;\r\n }\r\n // Set the time we want the next keep alive to be sent\r\n // Timer will be setup on next message receive\r\n this._nextKeepAlive = new Date().getTime() + this.keepAliveIntervalInMilliseconds;\r\n this._cleanupPingTimer();\r\n }\r\n _resetTimeoutPeriod() {\r\n if (!this.connection.features || !this.connection.features.inherentKeepAlive) {\r\n // Set the timeout timer\r\n this._timeoutHandle = setTimeout(() => this.serverTimeout(), this.serverTimeoutInMilliseconds);\r\n // Set keepAlive timer if there isn't one\r\n if (this._pingServerHandle === undefined) {\r\n let nextPing = this._nextKeepAlive - new Date().getTime();\r\n if (nextPing < 0) {\r\n nextPing = 0;\r\n }\r\n // The timer needs to be set from a networking callback to avoid Chrome timer throttling from causing timers to run once a minute\r\n this._pingServerHandle = setTimeout(async () => {\r\n if (this._connectionState === HubConnectionState.Connected) {\r\n try {\r\n await this._sendMessage(this._cachedPingMessage);\r\n }\r\n catch {\r\n // We don't care about the error. It should be seen elsewhere in the client.\r\n // The connection is probably in a bad or closed state now, cleanup the timer so it stops triggering\r\n this._cleanupPingTimer();\r\n }\r\n }\r\n }, nextPing);\r\n }\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n serverTimeout() {\r\n // The server hasn't talked to us in a while. It doesn't like us anymore ... :(\r\n // Terminate the connection, but we don't need to wait on the promise. This could trigger reconnecting.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(new Error(\"Server timeout elapsed without receiving a message from the server.\"));\r\n }\r\n async _invokeClientMethod(invocationMessage) {\r\n const methodName = invocationMessage.target.toLowerCase();\r\n const methods = this._methods[methodName];\r\n if (!methods) {\r\n this._logger.log(LogLevel.Warning, `No client method with the name '${methodName}' found.`);\r\n // No handlers provided by client but the server is expecting a response still, so we send an error\r\n if (invocationMessage.invocationId) {\r\n this._logger.log(LogLevel.Warning, `No result given for '${methodName}' method and invocation ID '${invocationMessage.invocationId}'.`);\r\n await this._sendWithProtocol(this._createCompletionMessage(invocationMessage.invocationId, \"Client didn't provide a result.\", null));\r\n }\r\n return;\r\n }\r\n // Avoid issues with handlers removing themselves thus modifying the list while iterating through it\r\n const methodsCopy = methods.slice();\r\n // Server expects a response\r\n const expectsResponse = invocationMessage.invocationId ? true : false;\r\n // We preserve the last result or exception but still call all handlers\r\n let res;\r\n let exception;\r\n let completionMessage;\r\n for (const m of methodsCopy) {\r\n try {\r\n const prevRes = res;\r\n res = await m.apply(this, invocationMessage.arguments);\r\n if (expectsResponse && res && prevRes) {\r\n this._logger.log(LogLevel.Error, `Multiple results provided for '${methodName}'. Sending error to server.`);\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId, `Client provided multiple results.`, null);\r\n }\r\n // Ignore exception if we got a result after, the exception will be logged\r\n exception = undefined;\r\n }\r\n catch (e) {\r\n exception = e;\r\n this._logger.log(LogLevel.Error, `A callback for the method '${methodName}' threw error '${e}'.`);\r\n }\r\n }\r\n if (completionMessage) {\r\n await this._sendWithProtocol(completionMessage);\r\n }\r\n else if (expectsResponse) {\r\n // If there is an exception that means either no result was given or a handler after a result threw\r\n if (exception) {\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId, `${exception}`, null);\r\n }\r\n else if (res !== undefined) {\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId, null, res);\r\n }\r\n else {\r\n this._logger.log(LogLevel.Warning, `No result given for '${methodName}' method and invocation ID '${invocationMessage.invocationId}'.`);\r\n // Client didn't provide a result or throw from a handler, server expects a response so we send an error\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId, \"Client didn't provide a result.\", null);\r\n }\r\n await this._sendWithProtocol(completionMessage);\r\n }\r\n else {\r\n if (res) {\r\n this._logger.log(LogLevel.Error, `Result given for '${methodName}' method but server is not expecting a result.`);\r\n }\r\n }\r\n }\r\n _connectionClosed(error) {\r\n this._logger.log(LogLevel.Debug, `HubConnection.connectionClosed(${error}) called while in state ${this._connectionState}.`);\r\n // Triggering this.handshakeRejecter is insufficient because it could already be resolved without the continuation having run yet.\r\n this._stopDuringStartError = this._stopDuringStartError || error || new AbortError(\"The underlying connection was closed before the hub handshake could complete.\");\r\n // If the handshake is in progress, start will be waiting for the handshake promise, so we complete it.\r\n // If it has already completed, this should just noop.\r\n if (this._handshakeResolver) {\r\n this._handshakeResolver();\r\n }\r\n this._cancelCallbacksWithError(error || new Error(\"Invocation canceled due to the underlying connection being closed.\"));\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._completeClose(error);\r\n }\r\n else if (this._connectionState === HubConnectionState.Connected && this._reconnectPolicy) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._reconnect(error);\r\n }\r\n else if (this._connectionState === HubConnectionState.Connected) {\r\n this._completeClose(error);\r\n }\r\n // If none of the above if conditions were true were called the HubConnection must be in either:\r\n // 1. The Connecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail it.\r\n // 2. The Reconnecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail the current reconnect attempt\r\n // and potentially continue the reconnect() loop.\r\n // 3. The Disconnected state in which case we're already done.\r\n }\r\n _completeClose(error) {\r\n if (this._connectionStarted) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n if (this._messageBuffer) {\r\n this._messageBuffer._dispose(error !== null && error !== void 0 ? error : new Error(\"Connection closed.\"));\r\n this._messageBuffer = undefined;\r\n }\r\n if (Platform.isBrowser) {\r\n window.document.removeEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n try {\r\n this._closedCallbacks.forEach((c) => c.apply(this, [error]));\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `An onclose callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n async _reconnect(error) {\r\n const reconnectStartTime = Date.now();\r\n let previousReconnectAttempts = 0;\r\n let retryError = error !== undefined ? error : new Error(\"Attempting to reconnect due to a unknown error.\");\r\n let nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts++, 0, retryError);\r\n if (nextRetryDelay === null) {\r\n this._logger.log(LogLevel.Debug, \"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt.\");\r\n this._completeClose(error);\r\n return;\r\n }\r\n this._connectionState = HubConnectionState.Reconnecting;\r\n if (error) {\r\n this._logger.log(LogLevel.Information, `Connection reconnecting because of error '${error}'.`);\r\n }\r\n else {\r\n this._logger.log(LogLevel.Information, \"Connection reconnecting.\");\r\n }\r\n if (this._reconnectingCallbacks.length !== 0) {\r\n try {\r\n this._reconnectingCallbacks.forEach((c) => c.apply(this, [error]));\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnecting callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n // Exit early if an onreconnecting callback called connection.stop().\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.\");\r\n return;\r\n }\r\n }\r\n while (nextRetryDelay !== null) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt number ${previousReconnectAttempts} will start in ${nextRetryDelay} ms.`);\r\n await new Promise((resolve) => {\r\n this._reconnectDelayHandle = setTimeout(resolve, nextRetryDelay);\r\n });\r\n this._reconnectDelayHandle = undefined;\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state during reconnect delay. Done reconnecting.\");\r\n return;\r\n }\r\n try {\r\n await this._startInternal();\r\n this._connectionState = HubConnectionState.Connected;\r\n this._logger.log(LogLevel.Information, \"HubConnection reconnected successfully.\");\r\n if (this._reconnectedCallbacks.length !== 0) {\r\n try {\r\n this._reconnectedCallbacks.forEach((c) => c.apply(this, [this.connection.connectionId]));\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${e}'.`);\r\n }\r\n }\r\n return;\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt failed because of error '${e}'.`);\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, `Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`);\r\n // The TypeScript compiler thinks that connectionState must be Connected here. The TypeScript compiler is wrong.\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._completeClose();\r\n }\r\n return;\r\n }\r\n retryError = e instanceof Error ? e : new Error(e.toString());\r\n nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts++, Date.now() - reconnectStartTime, retryError);\r\n }\r\n }\r\n this._logger.log(LogLevel.Information, `Reconnect retries have been exhausted after ${Date.now() - reconnectStartTime} ms and ${previousReconnectAttempts} failed attempts. Connection disconnecting.`);\r\n this._completeClose();\r\n }\r\n _getNextRetryDelay(previousRetryCount, elapsedMilliseconds, retryReason) {\r\n try {\r\n return this._reconnectPolicy.nextRetryDelayInMilliseconds({\r\n elapsedMilliseconds,\r\n previousRetryCount,\r\n retryReason,\r\n });\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `IRetryPolicy.nextRetryDelayInMilliseconds(${previousRetryCount}, ${elapsedMilliseconds}) threw error '${e}'.`);\r\n return null;\r\n }\r\n }\r\n _cancelCallbacksWithError(error) {\r\n const callbacks = this._callbacks;\r\n this._callbacks = {};\r\n Object.keys(callbacks)\r\n .forEach((key) => {\r\n const callback = callbacks[key];\r\n try {\r\n callback(null, error);\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream 'error' callback called with '${error}' threw error: ${getErrorString(e)}`);\r\n }\r\n });\r\n }\r\n _cleanupPingTimer() {\r\n if (this._pingServerHandle) {\r\n clearTimeout(this._pingServerHandle);\r\n this._pingServerHandle = undefined;\r\n }\r\n }\r\n _cleanupTimeout() {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n _createInvocation(methodName, args, nonblocking, streamIds) {\r\n if (nonblocking) {\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n streamIds,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n else {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n }\r\n _launchStreams(streams, promiseQueue) {\r\n if (streams.length === 0) {\r\n return;\r\n }\r\n // Synchronize stream data so they arrive in-order on the server\r\n if (!promiseQueue) {\r\n promiseQueue = Promise.resolve();\r\n }\r\n // We want to iterate over the keys, since the keys are the stream ids\r\n // eslint-disable-next-line guard-for-in\r\n for (const streamId in streams) {\r\n streams[streamId].subscribe({\r\n complete: () => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId)));\r\n },\r\n error: (err) => {\r\n let message;\r\n if (err instanceof Error) {\r\n message = err.message;\r\n }\r\n else if (err && err.toString) {\r\n message = err.toString();\r\n }\r\n else {\r\n message = \"Unknown error\";\r\n }\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId, message)));\r\n },\r\n next: (item) => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createStreamItemMessage(streamId, item)));\r\n },\r\n });\r\n }\r\n }\r\n _replaceStreamingParams(args) {\r\n const streams = [];\r\n const streamIds = [];\r\n for (let i = 0; i < args.length; i++) {\r\n const argument = args[i];\r\n if (this._isObservable(argument)) {\r\n const streamId = this._invocationId;\r\n this._invocationId++;\r\n // Store the stream for later use\r\n streams[streamId] = argument;\r\n streamIds.push(streamId.toString());\r\n // remove stream from args\r\n args.splice(i, 1);\r\n }\r\n }\r\n return [streams, streamIds];\r\n }\r\n _isObservable(arg) {\r\n // This allows other stream implementations to just work (like rxjs)\r\n return arg && arg.subscribe && typeof arg.subscribe === \"function\";\r\n }\r\n _createStreamInvocation(methodName, args, streamIds) {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n }\r\n _createCancelInvocation(id) {\r\n return {\r\n invocationId: id,\r\n type: MessageType.CancelInvocation,\r\n };\r\n }\r\n _createStreamItemMessage(id, item) {\r\n return {\r\n invocationId: id,\r\n item,\r\n type: MessageType.StreamItem,\r\n };\r\n }\r\n _createCompletionMessage(id, error, result) {\r\n if (error) {\r\n return {\r\n error,\r\n invocationId: id,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n return {\r\n invocationId: id,\r\n result,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n _createCloseMessage() {\r\n return { type: MessageType.Close };\r\n }\r\n}\r\n//# sourceMappingURL=HubConnection.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// 0, 2, 10, 30 second delays before reconnect attempts.\r\nconst DEFAULT_RETRY_DELAYS_IN_MILLISECONDS = [0, 2000, 10000, 30000, null];\r\n/** @private */\r\nexport class DefaultReconnectPolicy {\r\n constructor(retryDelays) {\r\n this._retryDelays = retryDelays !== undefined ? [...retryDelays, null] : DEFAULT_RETRY_DELAYS_IN_MILLISECONDS;\r\n }\r\n nextRetryDelayInMilliseconds(retryContext) {\r\n return this._retryDelays[retryContext.previousRetryCount];\r\n }\r\n}\r\n//# sourceMappingURL=DefaultReconnectPolicy.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nexport class HeaderNames {\r\n}\r\nHeaderNames.Authorization = \"Authorization\";\r\nHeaderNames.Cookie = \"Cookie\";\r\n//# sourceMappingURL=HeaderNames.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { HttpClient } from \"./HttpClient\";\r\n/** @private */\r\nexport class AccessTokenHttpClient extends HttpClient {\r\n constructor(innerClient, accessTokenFactory) {\r\n super();\r\n this._innerClient = innerClient;\r\n this._accessTokenFactory = accessTokenFactory;\r\n }\r\n async send(request) {\r\n let allowRetry = true;\r\n if (this._accessTokenFactory && (!this._accessToken || (request.url && request.url.indexOf(\"/negotiate?\") > 0))) {\r\n // don't retry if the request is a negotiate or if we just got a potentially new token from the access token factory\r\n allowRetry = false;\r\n this._accessToken = await this._accessTokenFactory();\r\n }\r\n this._setAuthorizationHeader(request);\r\n const response = await this._innerClient.send(request);\r\n if (allowRetry && response.statusCode === 401 && this._accessTokenFactory) {\r\n this._accessToken = await this._accessTokenFactory();\r\n this._setAuthorizationHeader(request);\r\n return await this._innerClient.send(request);\r\n }\r\n return response;\r\n }\r\n _setAuthorizationHeader(request) {\r\n if (!request.headers) {\r\n request.headers = {};\r\n }\r\n if (this._accessToken) {\r\n request.headers[HeaderNames.Authorization] = `Bearer ${this._accessToken}`;\r\n }\r\n // don't remove the header if there isn't an access token factory, the user manually added the header in this case\r\n else if (this._accessTokenFactory) {\r\n if (request.headers[HeaderNames.Authorization]) {\r\n delete request.headers[HeaderNames.Authorization];\r\n }\r\n }\r\n }\r\n getCookieString(url) {\r\n return this._innerClient.getCookieString(url);\r\n }\r\n}\r\n//# sourceMappingURL=AccessTokenHttpClient.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// This will be treated as a bit flag in the future, so we keep it using power-of-two values.\r\n/** Specifies a specific HTTP transport type. */\r\nexport var HttpTransportType;\r\n(function (HttpTransportType) {\r\n /** Specifies no transport preference. */\r\n HttpTransportType[HttpTransportType[\"None\"] = 0] = \"None\";\r\n /** Specifies the WebSockets transport. */\r\n HttpTransportType[HttpTransportType[\"WebSockets\"] = 1] = \"WebSockets\";\r\n /** Specifies the Server-Sent Events transport. */\r\n HttpTransportType[HttpTransportType[\"ServerSentEvents\"] = 2] = \"ServerSentEvents\";\r\n /** Specifies the Long Polling transport. */\r\n HttpTransportType[HttpTransportType[\"LongPolling\"] = 4] = \"LongPolling\";\r\n})(HttpTransportType || (HttpTransportType = {}));\r\n/** Specifies the transfer format for a connection. */\r\nexport var TransferFormat;\r\n(function (TransferFormat) {\r\n /** Specifies that only text data will be transmitted over the connection. */\r\n TransferFormat[TransferFormat[\"Text\"] = 1] = \"Text\";\r\n /** Specifies that binary data will be transmitted over the connection. */\r\n TransferFormat[TransferFormat[\"Binary\"] = 2] = \"Binary\";\r\n})(TransferFormat || (TransferFormat = {}));\r\n//# sourceMappingURL=ITransport.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// Rough polyfill of https://developer.mozilla.org/en-US/docs/Web/API/AbortController\r\n// We don't actually ever use the API being polyfilled, we always use the polyfill because\r\n// it's a very new API right now.\r\n// Not exported from index.\r\n/** @private */\r\nexport class AbortController {\r\n constructor() {\r\n this._isAborted = false;\r\n this.onabort = null;\r\n }\r\n abort() {\r\n if (!this._isAborted) {\r\n this._isAborted = true;\r\n if (this.onabort) {\r\n this.onabort();\r\n }\r\n }\r\n }\r\n get signal() {\r\n return this;\r\n }\r\n get aborted() {\r\n return this._isAborted;\r\n }\r\n}\r\n//# sourceMappingURL=AbortController.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortController } from \"./AbortController\";\r\nimport { HttpError, TimeoutError } from \"./Errors\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, sendMessage } from \"./Utils\";\r\n// Not exported from 'index', this type is internal.\r\n/** @private */\r\nexport class LongPollingTransport {\r\n // This is an internal type, not exported from 'index' so this is really just internal.\r\n get pollAborted() {\r\n return this._pollAbort.aborted;\r\n }\r\n constructor(httpClient, logger, options) {\r\n this._httpClient = httpClient;\r\n this._logger = logger;\r\n this._pollAbort = new AbortController();\r\n this._options = options;\r\n this._running = false;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n async connect(url, transferFormat) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._url = url;\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Connecting.\");\r\n // Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)\r\n if (transferFormat === TransferFormat.Binary &&\r\n (typeof XMLHttpRequest !== \"undefined\" && typeof new XMLHttpRequest().responseType !== \"string\")) {\r\n throw new Error(\"Binary protocols over XmlHttpRequest not implementing advanced features are not supported.\");\r\n }\r\n const [name, value] = getUserAgentHeader();\r\n const headers = { [name]: value, ...this._options.headers };\r\n const pollOptions = {\r\n abortSignal: this._pollAbort.signal,\r\n headers,\r\n timeout: 100000,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n if (transferFormat === TransferFormat.Binary) {\r\n pollOptions.responseType = \"arraybuffer\";\r\n }\r\n // Make initial long polling request\r\n // Server uses first long polling request to finish initializing connection and it returns without data\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n // Mark running as false so that the poll immediately ends and runs the close logic\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n }\r\n else {\r\n this._running = true;\r\n }\r\n this._receiving = this._poll(this._url, pollOptions);\r\n }\r\n async _poll(url, pollOptions) {\r\n try {\r\n while (this._running) {\r\n try {\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode === 204) {\r\n this._logger.log(LogLevel.Information, \"(LongPolling transport) Poll terminated by server.\");\r\n this._running = false;\r\n }\r\n else if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n // Unexpected status code\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n }\r\n else {\r\n // Process the response\r\n if (response.content) {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) data received. ${getDataDetail(response.content, this._options.logMessageContent)}.`);\r\n if (this.onreceive) {\r\n this.onreceive(response.content);\r\n }\r\n }\r\n else {\r\n // This is another way timeout manifest.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n }\r\n }\r\n catch (e) {\r\n if (!this._running) {\r\n // Log but disregard errors that occur after stopping\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Poll errored after shutdown: ${e.message}`);\r\n }\r\n else {\r\n if (e instanceof TimeoutError) {\r\n // Ignore timeouts and reissue the poll.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n else {\r\n // Close the connection with the error as the result.\r\n this._closeError = e;\r\n this._running = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Polling complete.\");\r\n // We will reach here with pollAborted==false when the server returned a response causing the transport to stop.\r\n // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.\r\n if (!this.pollAborted) {\r\n this._raiseOnClose();\r\n }\r\n }\r\n }\r\n async send(data) {\r\n if (!this._running) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"LongPolling\", this._httpClient, this._url, data, this._options);\r\n }\r\n async stop() {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stopping polling.\");\r\n // Tell receiving loop to stop, abort any current request, and then wait for it to finish\r\n this._running = false;\r\n this._pollAbort.abort();\r\n try {\r\n await this._receiving;\r\n // Send DELETE to clean up long polling on the server\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) sending DELETE request to ${this._url}.`);\r\n const headers = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n const deleteOptions = {\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n let error;\r\n try {\r\n await this._httpClient.delete(this._url, deleteOptions);\r\n }\r\n catch (err) {\r\n error = err;\r\n }\r\n if (error) {\r\n if (error instanceof HttpError) {\r\n if (error.statusCode === 404) {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) A 404 response was returned from sending a DELETE request.\");\r\n }\r\n else {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Error sending a DELETE request: ${error}`);\r\n }\r\n }\r\n }\r\n else {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) DELETE request accepted.\");\r\n }\r\n }\r\n finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stop finished.\");\r\n // Raise close event here instead of in polling\r\n // It needs to happen after the DELETE request is sent\r\n this._raiseOnClose();\r\n }\r\n }\r\n _raiseOnClose() {\r\n if (this.onclose) {\r\n let logMessage = \"(LongPolling transport) Firing onclose event.\";\r\n if (this._closeError) {\r\n logMessage += \" Error: \" + this._closeError;\r\n }\r\n this._logger.log(LogLevel.Trace, logMessage);\r\n this.onclose(this._closeError);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=LongPollingTransport.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform, sendMessage } from \"./Utils\";\r\n/** @private */\r\nexport class ServerSentEventsTransport {\r\n constructor(httpClient, accessToken, logger, options) {\r\n this._httpClient = httpClient;\r\n this._accessToken = accessToken;\r\n this._logger = logger;\r\n this._options = options;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n async connect(url, transferFormat) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Trace, \"(SSE transport) Connecting.\");\r\n // set url before accessTokenFactory because this._url is only for send and we set the auth header instead of the query string for send\r\n this._url = url;\r\n if (this._accessToken) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(this._accessToken)}`;\r\n }\r\n return new Promise((resolve, reject) => {\r\n let opened = false;\r\n if (transferFormat !== TransferFormat.Text) {\r\n reject(new Error(\"The Server-Sent Events transport only supports the 'Text' transfer format\"));\r\n return;\r\n }\r\n let eventSource;\r\n if (Platform.isBrowser || Platform.isWebWorker) {\r\n eventSource = new this._options.EventSource(url, { withCredentials: this._options.withCredentials });\r\n }\r\n else {\r\n // Non-browser passes cookies via the dictionary\r\n const cookies = this._httpClient.getCookieString(url);\r\n const headers = {};\r\n headers.Cookie = cookies;\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n eventSource = new this._options.EventSource(url, { withCredentials: this._options.withCredentials, headers: { ...headers, ...this._options.headers } });\r\n }\r\n try {\r\n eventSource.onmessage = (e) => {\r\n if (this.onreceive) {\r\n try {\r\n this._logger.log(LogLevel.Trace, `(SSE transport) data received. ${getDataDetail(e.data, this._options.logMessageContent)}.`);\r\n this.onreceive(e.data);\r\n }\r\n catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n // @ts-ignore: not using event on purpose\r\n eventSource.onerror = (e) => {\r\n // EventSource doesn't give any useful information about server side closes.\r\n if (opened) {\r\n this._close();\r\n }\r\n else {\r\n reject(new Error(\"EventSource failed to connect. The connection could not be found on the server,\"\r\n + \" either the connection ID is not present on the server, or a proxy is refusing/buffering the connection.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\"));\r\n }\r\n };\r\n eventSource.onopen = () => {\r\n this._logger.log(LogLevel.Information, `SSE connected to ${this._url}`);\r\n this._eventSource = eventSource;\r\n opened = true;\r\n resolve();\r\n };\r\n }\r\n catch (e) {\r\n reject(e);\r\n return;\r\n }\r\n });\r\n }\r\n async send(data) {\r\n if (!this._eventSource) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"SSE\", this._httpClient, this._url, data, this._options);\r\n }\r\n stop() {\r\n this._close();\r\n return Promise.resolve();\r\n }\r\n _close(e) {\r\n if (this._eventSource) {\r\n this._eventSource.close();\r\n this._eventSource = undefined;\r\n if (this.onclose) {\r\n this.onclose(e);\r\n }\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=ServerSentEventsTransport.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform } from \"./Utils\";\r\n/** @private */\r\nexport class WebSocketTransport {\r\n constructor(httpClient, accessTokenFactory, logger, logMessageContent, webSocketConstructor, headers) {\r\n this._logger = logger;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logMessageContent = logMessageContent;\r\n this._webSocketConstructor = webSocketConstructor;\r\n this._httpClient = httpClient;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n this._headers = headers;\r\n }\r\n async connect(url, transferFormat) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) Connecting.\");\r\n let token;\r\n if (this._accessTokenFactory) {\r\n token = await this._accessTokenFactory();\r\n }\r\n return new Promise((resolve, reject) => {\r\n url = url.replace(/^http/, \"ws\");\r\n let webSocket;\r\n const cookies = this._httpClient.getCookieString(url);\r\n let opened = false;\r\n if (Platform.isNode || Platform.isReactNative) {\r\n const headers = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n if (token) {\r\n headers[HeaderNames.Authorization] = `Bearer ${token}`;\r\n }\r\n if (cookies) {\r\n headers[HeaderNames.Cookie] = cookies;\r\n }\r\n // Only pass headers when in non-browser environments\r\n webSocket = new this._webSocketConstructor(url, undefined, {\r\n headers: { ...headers, ...this._headers },\r\n });\r\n }\r\n else {\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n if (!webSocket) {\r\n // Chrome is not happy with passing 'undefined' as protocol\r\n webSocket = new this._webSocketConstructor(url);\r\n }\r\n if (transferFormat === TransferFormat.Binary) {\r\n webSocket.binaryType = \"arraybuffer\";\r\n }\r\n webSocket.onopen = (_event) => {\r\n this._logger.log(LogLevel.Information, `WebSocket connected to ${url}.`);\r\n this._webSocket = webSocket;\r\n opened = true;\r\n resolve();\r\n };\r\n webSocket.onerror = (event) => {\r\n let error = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n }\r\n else {\r\n error = \"There was an error with the transport\";\r\n }\r\n this._logger.log(LogLevel.Information, `(WebSockets transport) ${error}.`);\r\n };\r\n webSocket.onmessage = (message) => {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) data received. ${getDataDetail(message.data, this._logMessageContent)}.`);\r\n if (this.onreceive) {\r\n try {\r\n this.onreceive(message.data);\r\n }\r\n catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n webSocket.onclose = (event) => {\r\n // Don't call close handler if connection was never established\r\n // We'll reject the connect call instead\r\n if (opened) {\r\n this._close(event);\r\n }\r\n else {\r\n let error = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n }\r\n else {\r\n error = \"WebSocket failed to connect. The connection could not be found on the server,\"\r\n + \" either the endpoint may not be a SignalR endpoint,\"\r\n + \" the connection ID is not present on the server, or there is a proxy blocking WebSockets.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\";\r\n }\r\n reject(new Error(error));\r\n }\r\n };\r\n });\r\n }\r\n send(data) {\r\n if (this._webSocket && this._webSocket.readyState === this._webSocketConstructor.OPEN) {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) sending data. ${getDataDetail(data, this._logMessageContent)}.`);\r\n this._webSocket.send(data);\r\n return Promise.resolve();\r\n }\r\n return Promise.reject(\"WebSocket is not in the OPEN state\");\r\n }\r\n stop() {\r\n if (this._webSocket) {\r\n // Manually invoke onclose callback inline so we know the HttpConnection was closed properly before returning\r\n // This also solves an issue where websocket.onclose could take 18+ seconds to trigger during network disconnects\r\n this._close(undefined);\r\n }\r\n return Promise.resolve();\r\n }\r\n _close(event) {\r\n // webSocket will be null if the transport did not start successfully\r\n if (this._webSocket) {\r\n // Clear websocket handlers because we are considering the socket closed now\r\n this._webSocket.onclose = () => { };\r\n this._webSocket.onmessage = () => { };\r\n this._webSocket.onerror = () => { };\r\n this._webSocket.close();\r\n this._webSocket = undefined;\r\n }\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) socket closed.\");\r\n if (this.onclose) {\r\n if (this._isCloseEvent(event) && (event.wasClean === false || event.code !== 1000)) {\r\n this.onclose(new Error(`WebSocket closed with status code: ${event.code} (${event.reason || \"no reason given\"}).`));\r\n }\r\n else if (event instanceof Error) {\r\n this.onclose(event);\r\n }\r\n else {\r\n this.onclose();\r\n }\r\n }\r\n }\r\n _isCloseEvent(event) {\r\n return event && typeof event.wasClean === \"boolean\" && typeof event.code === \"number\";\r\n }\r\n}\r\n//# sourceMappingURL=WebSocketTransport.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AccessTokenHttpClient } from \"./AccessTokenHttpClient\";\r\nimport { DefaultHttpClient } from \"./DefaultHttpClient\";\r\nimport { AggregateErrors, DisabledTransportError, FailedToNegotiateWithServerError, FailedToStartTransportError, HttpError, UnsupportedTransportError, AbortError } from \"./Errors\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { HttpTransportType, TransferFormat } from \"./ITransport\";\r\nimport { LongPollingTransport } from \"./LongPollingTransport\";\r\nimport { ServerSentEventsTransport } from \"./ServerSentEventsTransport\";\r\nimport { Arg, createLogger, getUserAgentHeader, Platform } from \"./Utils\";\r\nimport { WebSocketTransport } from \"./WebSocketTransport\";\r\nconst MAX_REDIRECTS = 100;\r\n/** @private */\r\nexport class HttpConnection {\r\n constructor(url, options = {}) {\r\n this._stopPromiseResolver = () => { };\r\n this.features = {};\r\n this._negotiateVersion = 1;\r\n Arg.isRequired(url, \"url\");\r\n this._logger = createLogger(options.logger);\r\n this.baseUrl = this._resolveUrl(url);\r\n options = options || {};\r\n options.logMessageContent = options.logMessageContent === undefined ? false : options.logMessageContent;\r\n if (typeof options.withCredentials === \"boolean\" || options.withCredentials === undefined) {\r\n options.withCredentials = options.withCredentials === undefined ? true : options.withCredentials;\r\n }\r\n else {\r\n throw new Error(\"withCredentials option was not a 'boolean' or 'undefined' value\");\r\n }\r\n options.timeout = options.timeout === undefined ? 100 * 1000 : options.timeout;\r\n let webSocketModule = null;\r\n let eventSourceModule = null;\r\n if (Platform.isNode && typeof require !== \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n webSocketModule = requireFunc(\"ws\");\r\n eventSourceModule = requireFunc(\"eventsource\");\r\n }\r\n if (!Platform.isNode && typeof WebSocket !== \"undefined\" && !options.WebSocket) {\r\n options.WebSocket = WebSocket;\r\n }\r\n else if (Platform.isNode && !options.WebSocket) {\r\n if (webSocketModule) {\r\n options.WebSocket = webSocketModule;\r\n }\r\n }\r\n if (!Platform.isNode && typeof EventSource !== \"undefined\" && !options.EventSource) {\r\n options.EventSource = EventSource;\r\n }\r\n else if (Platform.isNode && !options.EventSource) {\r\n if (typeof eventSourceModule !== \"undefined\") {\r\n options.EventSource = eventSourceModule;\r\n }\r\n }\r\n this._httpClient = new AccessTokenHttpClient(options.httpClient || new DefaultHttpClient(this._logger), options.accessTokenFactory);\r\n this._connectionState = \"Disconnected\" /* ConnectionState.Disconnected */;\r\n this._connectionStarted = false;\r\n this._options = options;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n async start(transferFormat) {\r\n transferFormat = transferFormat || TransferFormat.Binary;\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Debug, `Starting connection with transfer format '${TransferFormat[transferFormat]}'.`);\r\n if (this._connectionState !== \"Disconnected\" /* ConnectionState.Disconnected */) {\r\n return Promise.reject(new Error(\"Cannot start an HttpConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n this._connectionState = \"Connecting\" /* ConnectionState.Connecting */;\r\n this._startInternalPromise = this._startInternal(transferFormat);\r\n await this._startInternalPromise;\r\n // The TypeScript compiler thinks that connectionState must be Connecting here. The TypeScript compiler is wrong.\r\n if (this._connectionState === \"Disconnecting\" /* ConnectionState.Disconnecting */) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"Failed to start the HttpConnection before stop() was called.\";\r\n this._logger.log(LogLevel.Error, message);\r\n // We cannot await stopPromise inside startInternal since stopInternal awaits the startInternalPromise.\r\n await this._stopPromise;\r\n return Promise.reject(new AbortError(message));\r\n }\r\n else if (this._connectionState !== \"Connected\" /* ConnectionState.Connected */) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!\";\r\n this._logger.log(LogLevel.Error, message);\r\n return Promise.reject(new AbortError(message));\r\n }\r\n this._connectionStarted = true;\r\n }\r\n send(data) {\r\n if (this._connectionState !== \"Connected\" /* ConnectionState.Connected */) {\r\n return Promise.reject(new Error(\"Cannot send data if the connection is not in the 'Connected' State.\"));\r\n }\r\n if (!this._sendQueue) {\r\n this._sendQueue = new TransportSendQueue(this.transport);\r\n }\r\n // Transport will not be null if state is connected\r\n return this._sendQueue.send(data);\r\n }\r\n async stop(error) {\r\n if (this._connectionState === \"Disconnected\" /* ConnectionState.Disconnected */) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n if (this._connectionState === \"Disconnecting\" /* ConnectionState.Disconnecting */) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise;\r\n }\r\n this._connectionState = \"Disconnecting\" /* ConnectionState.Disconnecting */;\r\n this._stopPromise = new Promise((resolve) => {\r\n // Don't complete stop() until stopConnection() completes.\r\n this._stopPromiseResolver = resolve;\r\n });\r\n // stopInternal should never throw so just observe it.\r\n await this._stopInternal(error);\r\n await this._stopPromise;\r\n }\r\n async _stopInternal(error) {\r\n // Set error as soon as possible otherwise there is a race between\r\n // the transport closing and providing an error and the error from a close message\r\n // We would prefer the close message error.\r\n this._stopError = error;\r\n try {\r\n await this._startInternalPromise;\r\n }\r\n catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n // The transport's onclose will trigger stopConnection which will run our onclose event.\r\n // The transport should always be set if currently connected. If it wasn't set, it's likely because\r\n // stop was called during start() and start() failed.\r\n if (this.transport) {\r\n try {\r\n await this.transport.stop();\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.transport.stop() threw error '${e}'.`);\r\n this._stopConnection();\r\n }\r\n this.transport = undefined;\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, \"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.\");\r\n }\r\n }\r\n async _startInternal(transferFormat) {\r\n // Store the original base url and the access token factory since they may change\r\n // as part of negotiating\r\n let url = this.baseUrl;\r\n this._accessTokenFactory = this._options.accessTokenFactory;\r\n this._httpClient._accessTokenFactory = this._accessTokenFactory;\r\n try {\r\n if (this._options.skipNegotiation) {\r\n if (this._options.transport === HttpTransportType.WebSockets) {\r\n // No need to add a connection ID in this case\r\n this.transport = this._constructTransport(HttpTransportType.WebSockets);\r\n // We should just call connect directly in this case.\r\n // No fallback or negotiate in this case.\r\n await this._startTransport(url, transferFormat);\r\n }\r\n else {\r\n throw new Error(\"Negotiation can only be skipped when using the WebSocket transport directly.\");\r\n }\r\n }\r\n else {\r\n let negotiateResponse = null;\r\n let redirects = 0;\r\n do {\r\n negotiateResponse = await this._getNegotiationResponse(url);\r\n // the user tries to stop the connection when it is being started\r\n if (this._connectionState === \"Disconnecting\" /* ConnectionState.Disconnecting */ || this._connectionState === \"Disconnected\" /* ConnectionState.Disconnected */) {\r\n throw new AbortError(\"The connection was stopped during negotiation.\");\r\n }\r\n if (negotiateResponse.error) {\r\n throw new Error(negotiateResponse.error);\r\n }\r\n if (negotiateResponse.ProtocolVersion) {\r\n throw new Error(\"Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.\");\r\n }\r\n if (negotiateResponse.url) {\r\n url = negotiateResponse.url;\r\n }\r\n if (negotiateResponse.accessToken) {\r\n // Replace the current access token factory with one that uses\r\n // the returned access token\r\n const accessToken = negotiateResponse.accessToken;\r\n this._accessTokenFactory = () => accessToken;\r\n // set the factory to undefined so the AccessTokenHttpClient won't retry with the same token, since we know it won't change until a connection restart\r\n this._httpClient._accessToken = accessToken;\r\n this._httpClient._accessTokenFactory = undefined;\r\n }\r\n redirects++;\r\n } while (negotiateResponse.url && redirects < MAX_REDIRECTS);\r\n if (redirects === MAX_REDIRECTS && negotiateResponse.url) {\r\n throw new Error(\"Negotiate redirection limit exceeded.\");\r\n }\r\n await this._createTransport(url, this._options.transport, negotiateResponse, transferFormat);\r\n }\r\n if (this.transport instanceof LongPollingTransport) {\r\n this.features.inherentKeepAlive = true;\r\n }\r\n if (this._connectionState === \"Connecting\" /* ConnectionState.Connecting */) {\r\n // Ensure the connection transitions to the connected state prior to completing this.startInternalPromise.\r\n // start() will handle the case when stop was called and startInternal exits still in the disconnecting state.\r\n this._logger.log(LogLevel.Debug, \"The HttpConnection connected successfully.\");\r\n this._connectionState = \"Connected\" /* ConnectionState.Connected */;\r\n }\r\n // stop() is waiting on us via this.startInternalPromise so keep this.transport around so it can clean up.\r\n // This is the only case startInternal can exit in neither the connected nor disconnected state because stopConnection()\r\n // will transition to the disconnected state. start() will wait for the transition using the stopPromise.\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, \"Failed to start the connection: \" + e);\r\n this._connectionState = \"Disconnected\" /* ConnectionState.Disconnected */;\r\n this.transport = undefined;\r\n // if start fails, any active calls to stop assume that start will complete the stop promise\r\n this._stopPromiseResolver();\r\n return Promise.reject(e);\r\n }\r\n }\r\n async _getNegotiationResponse(url) {\r\n const headers = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n const negotiateUrl = this._resolveNegotiateUrl(url);\r\n this._logger.log(LogLevel.Debug, `Sending negotiation request: ${negotiateUrl}.`);\r\n try {\r\n const response = await this._httpClient.post(negotiateUrl, {\r\n content: \"\",\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n });\r\n if (response.statusCode !== 200) {\r\n return Promise.reject(new Error(`Unexpected status code returned from negotiate '${response.statusCode}'`));\r\n }\r\n const negotiateResponse = JSON.parse(response.content);\r\n if (!negotiateResponse.negotiateVersion || negotiateResponse.negotiateVersion < 1) {\r\n // Negotiate version 0 doesn't use connectionToken\r\n // So we set it equal to connectionId so all our logic can use connectionToken without being aware of the negotiate version\r\n negotiateResponse.connectionToken = negotiateResponse.connectionId;\r\n }\r\n if (negotiateResponse.useStatefulReconnect && this._options._useStatefulReconnect !== true) {\r\n return Promise.reject(new FailedToNegotiateWithServerError(\"Client didn't negotiate Stateful Reconnect but the server did.\"));\r\n }\r\n return negotiateResponse;\r\n }\r\n catch (e) {\r\n let errorMessage = \"Failed to complete negotiation with the server: \" + e;\r\n if (e instanceof HttpError) {\r\n if (e.statusCode === 404) {\r\n errorMessage = errorMessage + \" Either this is not a SignalR endpoint or there is a proxy blocking the connection.\";\r\n }\r\n }\r\n this._logger.log(LogLevel.Error, errorMessage);\r\n return Promise.reject(new FailedToNegotiateWithServerError(errorMessage));\r\n }\r\n }\r\n _createConnectUrl(url, connectionToken) {\r\n if (!connectionToken) {\r\n return url;\r\n }\r\n return url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + `id=${connectionToken}`;\r\n }\r\n async _createTransport(url, requestedTransport, negotiateResponse, requestedTransferFormat) {\r\n let connectUrl = this._createConnectUrl(url, negotiateResponse.connectionToken);\r\n if (this._isITransport(requestedTransport)) {\r\n this._logger.log(LogLevel.Debug, \"Connection was provided an instance of ITransport, using that directly.\");\r\n this.transport = requestedTransport;\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n this.connectionId = negotiateResponse.connectionId;\r\n return;\r\n }\r\n const transportExceptions = [];\r\n const transports = negotiateResponse.availableTransports || [];\r\n let negotiate = negotiateResponse;\r\n for (const endpoint of transports) {\r\n const transportOrError = this._resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat, (negotiate === null || negotiate === void 0 ? void 0 : negotiate.useStatefulReconnect) === true);\r\n if (transportOrError instanceof Error) {\r\n // Store the error and continue, we don't want to cause a re-negotiate in these cases\r\n transportExceptions.push(`${endpoint.transport} failed:`);\r\n transportExceptions.push(transportOrError);\r\n }\r\n else if (this._isITransport(transportOrError)) {\r\n this.transport = transportOrError;\r\n if (!negotiate) {\r\n try {\r\n negotiate = await this._getNegotiationResponse(url);\r\n }\r\n catch (ex) {\r\n return Promise.reject(ex);\r\n }\r\n connectUrl = this._createConnectUrl(url, negotiate.connectionToken);\r\n }\r\n try {\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n this.connectionId = negotiate.connectionId;\r\n return;\r\n }\r\n catch (ex) {\r\n this._logger.log(LogLevel.Error, `Failed to start the transport '${endpoint.transport}': ${ex}`);\r\n negotiate = undefined;\r\n transportExceptions.push(new FailedToStartTransportError(`${endpoint.transport} failed: ${ex}`, HttpTransportType[endpoint.transport]));\r\n if (this._connectionState !== \"Connecting\" /* ConnectionState.Connecting */) {\r\n const message = \"Failed to select transport before stop() was called.\";\r\n this._logger.log(LogLevel.Debug, message);\r\n return Promise.reject(new AbortError(message));\r\n }\r\n }\r\n }\r\n }\r\n if (transportExceptions.length > 0) {\r\n return Promise.reject(new AggregateErrors(`Unable to connect to the server with any of the available transports. ${transportExceptions.join(\" \")}`, transportExceptions));\r\n }\r\n return Promise.reject(new Error(\"None of the transports supported by the client are supported by the server.\"));\r\n }\r\n _constructTransport(transport) {\r\n switch (transport) {\r\n case HttpTransportType.WebSockets:\r\n if (!this._options.WebSocket) {\r\n throw new Error(\"'WebSocket' is not supported in your environment.\");\r\n }\r\n return new WebSocketTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options.logMessageContent, this._options.WebSocket, this._options.headers || {});\r\n case HttpTransportType.ServerSentEvents:\r\n if (!this._options.EventSource) {\r\n throw new Error(\"'EventSource' is not supported in your environment.\");\r\n }\r\n return new ServerSentEventsTransport(this._httpClient, this._httpClient._accessToken, this._logger, this._options);\r\n case HttpTransportType.LongPolling:\r\n return new LongPollingTransport(this._httpClient, this._logger, this._options);\r\n default:\r\n throw new Error(`Unknown transport: ${transport}.`);\r\n }\r\n }\r\n _startTransport(url, transferFormat) {\r\n this.transport.onreceive = this.onreceive;\r\n if (this.features.reconnect) {\r\n this.transport.onclose = async (e) => {\r\n let callStop = false;\r\n if (this.features.reconnect) {\r\n try {\r\n this.features.disconnected();\r\n await this.transport.connect(url, transferFormat);\r\n await this.features.resend();\r\n }\r\n catch {\r\n callStop = true;\r\n }\r\n }\r\n else {\r\n this._stopConnection(e);\r\n return;\r\n }\r\n if (callStop) {\r\n this._stopConnection(e);\r\n }\r\n };\r\n }\r\n else {\r\n this.transport.onclose = (e) => this._stopConnection(e);\r\n }\r\n return this.transport.connect(url, transferFormat);\r\n }\r\n _resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat, useStatefulReconnect) {\r\n const transport = HttpTransportType[endpoint.transport];\r\n if (transport === null || transport === undefined) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n return new Error(`Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n }\r\n else {\r\n if (transportMatches(requestedTransport, transport)) {\r\n const transferFormats = endpoint.transferFormats.map((s) => TransferFormat[s]);\r\n if (transferFormats.indexOf(requestedTransferFormat) >= 0) {\r\n if ((transport === HttpTransportType.WebSockets && !this._options.WebSocket) ||\r\n (transport === HttpTransportType.ServerSentEvents && !this._options.EventSource)) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it is not supported in your environment.'`);\r\n return new UnsupportedTransportError(`'${HttpTransportType[transport]}' is not supported in your environment.`, transport);\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, `Selecting transport '${HttpTransportType[transport]}'.`);\r\n try {\r\n this.features.reconnect = transport === HttpTransportType.WebSockets ? useStatefulReconnect : undefined;\r\n return this._constructTransport(transport);\r\n }\r\n catch (ex) {\r\n return ex;\r\n }\r\n }\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it does not support the requested transfer format '${TransferFormat[requestedTransferFormat]}'.`);\r\n return new Error(`'${HttpTransportType[transport]}' does not support ${TransferFormat[requestedTransferFormat]}.`);\r\n }\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it was disabled by the client.`);\r\n return new DisabledTransportError(`'${HttpTransportType[transport]}' is disabled by the client.`, transport);\r\n }\r\n }\r\n }\r\n _isITransport(transport) {\r\n return transport && typeof (transport) === \"object\" && \"connect\" in transport;\r\n }\r\n _stopConnection(error) {\r\n this._logger.log(LogLevel.Debug, `HttpConnection.stopConnection(${error}) called while in state ${this._connectionState}.`);\r\n this.transport = undefined;\r\n // If we have a stopError, it takes precedence over the error from the transport\r\n error = this._stopError || error;\r\n this._stopError = undefined;\r\n if (this._connectionState === \"Disconnected\" /* ConnectionState.Disconnected */) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is already in the disconnected state.`);\r\n return;\r\n }\r\n if (this._connectionState === \"Connecting\" /* ConnectionState.Connecting */) {\r\n this._logger.log(LogLevel.Warning, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is still in the connecting state.`);\r\n throw new Error(`HttpConnection.stopConnection(${error}) was called while the connection is still in the connecting state.`);\r\n }\r\n if (this._connectionState === \"Disconnecting\" /* ConnectionState.Disconnecting */) {\r\n // A call to stop() induced this call to stopConnection and needs to be completed.\r\n // Any stop() awaiters will be scheduled to continue after the onclose callback fires.\r\n this._stopPromiseResolver();\r\n }\r\n if (error) {\r\n this._logger.log(LogLevel.Error, `Connection disconnected with error '${error}'.`);\r\n }\r\n else {\r\n this._logger.log(LogLevel.Information, \"Connection disconnected.\");\r\n }\r\n if (this._sendQueue) {\r\n this._sendQueue.stop().catch((e) => {\r\n this._logger.log(LogLevel.Error, `TransportSendQueue.stop() threw error '${e}'.`);\r\n });\r\n this._sendQueue = undefined;\r\n }\r\n this.connectionId = undefined;\r\n this._connectionState = \"Disconnected\" /* ConnectionState.Disconnected */;\r\n if (this._connectionStarted) {\r\n this._connectionStarted = false;\r\n try {\r\n if (this.onclose) {\r\n this.onclose(error);\r\n }\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.onclose(${error}) threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n _resolveUrl(url) {\r\n // startsWith is not supported in IE\r\n if (url.lastIndexOf(\"https://\", 0) === 0 || url.lastIndexOf(\"http://\", 0) === 0) {\r\n return url;\r\n }\r\n if (!Platform.isBrowser) {\r\n throw new Error(`Cannot resolve '${url}'.`);\r\n }\r\n // Setting the url to the href propery of an anchor tag handles normalization\r\n // for us. There are 3 main cases.\r\n // 1. Relative path normalization e.g \"b\" -> \"http://localhost:5000/a/b\"\r\n // 2. Absolute path normalization e.g \"/a/b\" -> \"http://localhost:5000/a/b\"\r\n // 3. Networkpath reference normalization e.g \"//localhost:5000/a/b\" -> \"http://localhost:5000/a/b\"\r\n const aTag = window.document.createElement(\"a\");\r\n aTag.href = url;\r\n this._logger.log(LogLevel.Information, `Normalizing '${url}' to '${aTag.href}'.`);\r\n return aTag.href;\r\n }\r\n _resolveNegotiateUrl(url) {\r\n const negotiateUrl = new URL(url);\r\n if (negotiateUrl.pathname.endsWith('/')) {\r\n negotiateUrl.pathname += \"negotiate\";\r\n }\r\n else {\r\n negotiateUrl.pathname += \"/negotiate\";\r\n }\r\n const searchParams = new URLSearchParams(negotiateUrl.searchParams);\r\n if (!searchParams.has(\"negotiateVersion\")) {\r\n searchParams.append(\"negotiateVersion\", this._negotiateVersion.toString());\r\n }\r\n if (searchParams.has(\"useStatefulReconnect\")) {\r\n if (searchParams.get(\"useStatefulReconnect\") === \"true\") {\r\n this._options._useStatefulReconnect = true;\r\n }\r\n }\r\n else if (this._options._useStatefulReconnect === true) {\r\n searchParams.append(\"useStatefulReconnect\", \"true\");\r\n }\r\n negotiateUrl.search = searchParams.toString();\r\n return negotiateUrl.toString();\r\n }\r\n}\r\nfunction transportMatches(requestedTransport, actualTransport) {\r\n return !requestedTransport || ((actualTransport & requestedTransport) !== 0);\r\n}\r\n/** @private */\r\nexport class TransportSendQueue {\r\n constructor(_transport) {\r\n this._transport = _transport;\r\n this._buffer = [];\r\n this._executing = true;\r\n this._sendBufferedData = new PromiseSource();\r\n this._transportResult = new PromiseSource();\r\n this._sendLoopPromise = this._sendLoop();\r\n }\r\n send(data) {\r\n this._bufferData(data);\r\n if (!this._transportResult) {\r\n this._transportResult = new PromiseSource();\r\n }\r\n return this._transportResult.promise;\r\n }\r\n stop() {\r\n this._executing = false;\r\n this._sendBufferedData.resolve();\r\n return this._sendLoopPromise;\r\n }\r\n _bufferData(data) {\r\n if (this._buffer.length && typeof (this._buffer[0]) !== typeof (data)) {\r\n throw new Error(`Expected data to be of type ${typeof (this._buffer)} but was of type ${typeof (data)}`);\r\n }\r\n this._buffer.push(data);\r\n this._sendBufferedData.resolve();\r\n }\r\n async _sendLoop() {\r\n while (true) {\r\n await this._sendBufferedData.promise;\r\n if (!this._executing) {\r\n if (this._transportResult) {\r\n this._transportResult.reject(\"Connection stopped.\");\r\n }\r\n break;\r\n }\r\n this._sendBufferedData = new PromiseSource();\r\n const transportResult = this._transportResult;\r\n this._transportResult = undefined;\r\n const data = typeof (this._buffer[0]) === \"string\" ?\r\n this._buffer.join(\"\") :\r\n TransportSendQueue._concatBuffers(this._buffer);\r\n this._buffer.length = 0;\r\n try {\r\n await this._transport.send(data);\r\n transportResult.resolve();\r\n }\r\n catch (error) {\r\n transportResult.reject(error);\r\n }\r\n }\r\n }\r\n static _concatBuffers(arrayBuffers) {\r\n const totalLength = arrayBuffers.map((b) => b.byteLength).reduce((a, b) => a + b);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const item of arrayBuffers) {\r\n result.set(new Uint8Array(item), offset);\r\n offset += item.byteLength;\r\n }\r\n return result.buffer;\r\n }\r\n}\r\nclass PromiseSource {\r\n constructor() {\r\n this.promise = new Promise((resolve, reject) => [this._resolver, this._rejecter] = [resolve, reject]);\r\n }\r\n resolve() {\r\n this._resolver();\r\n }\r\n reject(reason) {\r\n this._rejecter(reason);\r\n }\r\n}\r\n//# sourceMappingURL=HttpConnection.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { MessageType } from \"./IHubProtocol\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nconst JSON_HUB_PROTOCOL_NAME = \"json\";\r\n/** Implements the JSON Hub Protocol. */\r\nexport class JsonHubProtocol {\r\n constructor() {\r\n /** @inheritDoc */\r\n this.name = JSON_HUB_PROTOCOL_NAME;\r\n /** @inheritDoc */\r\n this.version = 2;\r\n /** @inheritDoc */\r\n this.transferFormat = TransferFormat.Text;\r\n }\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * @param {string} input A string containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n parseMessages(input, logger) {\r\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\r\n if (typeof input !== \"string\") {\r\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\r\n }\r\n if (!input) {\r\n return [];\r\n }\r\n if (logger === null) {\r\n logger = NullLogger.instance;\r\n }\r\n // Parse the messages\r\n const messages = TextMessageFormat.parse(input);\r\n const hubMessages = [];\r\n for (const message of messages) {\r\n const parsedMessage = JSON.parse(message);\r\n if (typeof parsedMessage.type !== \"number\") {\r\n throw new Error(\"Invalid payload.\");\r\n }\r\n switch (parsedMessage.type) {\r\n case MessageType.Invocation:\r\n this._isInvocationMessage(parsedMessage);\r\n break;\r\n case MessageType.StreamItem:\r\n this._isStreamItemMessage(parsedMessage);\r\n break;\r\n case MessageType.Completion:\r\n this._isCompletionMessage(parsedMessage);\r\n break;\r\n case MessageType.Ping:\r\n // Single value, no need to validate\r\n break;\r\n case MessageType.Close:\r\n // All optional values, no need to validate\r\n break;\r\n case MessageType.Ack:\r\n this._isAckMessage(parsedMessage);\r\n break;\r\n case MessageType.Sequence:\r\n this._isSequenceMessage(parsedMessage);\r\n break;\r\n default:\r\n // Future protocol changes can add message types, old clients can ignore them\r\n logger.log(LogLevel.Information, \"Unknown message type '\" + parsedMessage.type + \"' ignored.\");\r\n continue;\r\n }\r\n hubMessages.push(parsedMessage);\r\n }\r\n return hubMessages;\r\n }\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string and returns it.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string} A string containing the serialized representation of the message.\r\n */\r\n writeMessage(message) {\r\n return TextMessageFormat.write(JSON.stringify(message));\r\n }\r\n _isInvocationMessage(message) {\r\n this._assertNotEmptyString(message.target, \"Invalid payload for Invocation message.\");\r\n if (message.invocationId !== undefined) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Invocation message.\");\r\n }\r\n }\r\n _isStreamItemMessage(message) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for StreamItem message.\");\r\n if (message.item === undefined) {\r\n throw new Error(\"Invalid payload for StreamItem message.\");\r\n }\r\n }\r\n _isCompletionMessage(message) {\r\n if (message.result && message.error) {\r\n throw new Error(\"Invalid payload for Completion message.\");\r\n }\r\n if (!message.result && message.error) {\r\n this._assertNotEmptyString(message.error, \"Invalid payload for Completion message.\");\r\n }\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Completion message.\");\r\n }\r\n _isAckMessage(message) {\r\n if (typeof message.sequenceId !== 'number') {\r\n throw new Error(\"Invalid SequenceId for Ack message.\");\r\n }\r\n }\r\n _isSequenceMessage(message) {\r\n if (typeof message.sequenceId !== 'number') {\r\n throw new Error(\"Invalid SequenceId for Sequence message.\");\r\n }\r\n }\r\n _assertNotEmptyString(value, errorMessage) {\r\n if (typeof value !== \"string\" || value === \"\") {\r\n throw new Error(errorMessage);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=JsonHubProtocol.js.map","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { DefaultReconnectPolicy } from \"./DefaultReconnectPolicy\";\r\nimport { HttpConnection } from \"./HttpConnection\";\r\nimport { HubConnection } from \"./HubConnection\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { JsonHubProtocol } from \"./JsonHubProtocol\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { Arg, ConsoleLogger } from \"./Utils\";\r\nconst LogLevelNameMapping = {\r\n trace: LogLevel.Trace,\r\n debug: LogLevel.Debug,\r\n info: LogLevel.Information,\r\n information: LogLevel.Information,\r\n warn: LogLevel.Warning,\r\n warning: LogLevel.Warning,\r\n error: LogLevel.Error,\r\n critical: LogLevel.Critical,\r\n none: LogLevel.None,\r\n};\r\nfunction parseLogLevel(name) {\r\n // Case-insensitive matching via lower-casing\r\n // Yes, I know case-folding is a complicated problem in Unicode, but we only support\r\n // the ASCII strings defined in LogLevelNameMapping anyway, so it's fine -anurse.\r\n const mapping = LogLevelNameMapping[name.toLowerCase()];\r\n if (typeof mapping !== \"undefined\") {\r\n return mapping;\r\n }\r\n else {\r\n throw new Error(`Unknown log level: ${name}`);\r\n }\r\n}\r\n/** A builder for configuring {@link @microsoft/signalr.HubConnection} instances. */\r\nexport class HubConnectionBuilder {\r\n configureLogging(logging) {\r\n Arg.isRequired(logging, \"logging\");\r\n if (isLogger(logging)) {\r\n this.logger = logging;\r\n }\r\n else if (typeof logging === \"string\") {\r\n const logLevel = parseLogLevel(logging);\r\n this.logger = new ConsoleLogger(logLevel);\r\n }\r\n else {\r\n this.logger = new ConsoleLogger(logging);\r\n }\r\n return this;\r\n }\r\n withUrl(url, transportTypeOrOptions) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isNotEmpty(url, \"url\");\r\n this.url = url;\r\n // Flow-typing knows where it's at. Since HttpTransportType is a number and IHttpConnectionOptions is guaranteed\r\n // to be an object, we know (as does TypeScript) this comparison is all we need to figure out which overload was called.\r\n if (typeof transportTypeOrOptions === \"object\") {\r\n this.httpConnectionOptions = { ...this.httpConnectionOptions, ...transportTypeOrOptions };\r\n }\r\n else {\r\n this.httpConnectionOptions = {\r\n ...this.httpConnectionOptions,\r\n transport: transportTypeOrOptions,\r\n };\r\n }\r\n return this;\r\n }\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified Hub Protocol.\r\n *\r\n * @param {IHubProtocol} protocol The {@link @microsoft/signalr.IHubProtocol} implementation to use.\r\n */\r\n withHubProtocol(protocol) {\r\n Arg.isRequired(protocol, \"protocol\");\r\n this.protocol = protocol;\r\n return this;\r\n }\r\n withAutomaticReconnect(retryDelaysOrReconnectPolicy) {\r\n if (this.reconnectPolicy) {\r\n throw new Error(\"A reconnectPolicy has already been set.\");\r\n }\r\n if (!retryDelaysOrReconnectPolicy) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy();\r\n }\r\n else if (Array.isArray(retryDelaysOrReconnectPolicy)) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy(retryDelaysOrReconnectPolicy);\r\n }\r\n else {\r\n this.reconnectPolicy = retryDelaysOrReconnectPolicy;\r\n }\r\n return this;\r\n }\r\n /** Configures {@link @microsoft/signalr.HubConnection.serverTimeoutInMilliseconds} for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n withServerTimeout(milliseconds) {\r\n Arg.isRequired(milliseconds, \"milliseconds\");\r\n this._serverTimeoutInMilliseconds = milliseconds;\r\n return this;\r\n }\r\n /** Configures {@link @microsoft/signalr.HubConnection.keepAliveIntervalInMilliseconds} for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n withKeepAliveInterval(milliseconds) {\r\n Arg.isRequired(milliseconds, \"milliseconds\");\r\n this._keepAliveIntervalInMilliseconds = milliseconds;\r\n return this;\r\n }\r\n /** Enables and configures options for the Stateful Reconnect feature.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n withStatefulReconnect(options) {\r\n if (this.httpConnectionOptions === undefined) {\r\n this.httpConnectionOptions = {};\r\n }\r\n this.httpConnectionOptions._useStatefulReconnect = true;\r\n this._statefulReconnectBufferSize = options === null || options === void 0 ? void 0 : options.bufferSize;\r\n return this;\r\n }\r\n /** Creates a {@link @microsoft/signalr.HubConnection} from the configuration options specified in this builder.\r\n *\r\n * @returns {HubConnection} The configured {@link @microsoft/signalr.HubConnection}.\r\n */\r\n build() {\r\n // If httpConnectionOptions has a logger, use it. Otherwise, override it with the one\r\n // provided to configureLogger\r\n const httpConnectionOptions = this.httpConnectionOptions || {};\r\n // If it's 'null', the user **explicitly** asked for null, don't mess with it.\r\n if (httpConnectionOptions.logger === undefined) {\r\n // If our logger is undefined or null, that's OK, the HttpConnection constructor will handle it.\r\n httpConnectionOptions.logger = this.logger;\r\n }\r\n // Now create the connection\r\n if (!this.url) {\r\n throw new Error(\"The 'HubConnectionBuilder.withUrl' method must be called before building the connection.\");\r\n }\r\n const connection = new HttpConnection(this.url, httpConnectionOptions);\r\n return HubConnection.create(connection, this.logger || NullLogger.instance, this.protocol || new JsonHubProtocol(), this.reconnectPolicy, this._serverTimeoutInMilliseconds, this._keepAliveIntervalInMilliseconds, this._statefulReconnectBufferSize);\r\n }\r\n}\r\nfunction isLogger(logger) {\r\n return logger.log !== undefined;\r\n}\r\n//# sourceMappingURL=HubConnectionBuilder.js.map","import { HubConnection, HubConnectionBuilder, LogLevel } from '@microsoft/signalr';\r\n\r\nimport { AccessTokenProvider } from '@/auth/access-token-provider';\r\nimport { toAppError } from '@/core/errors/app-error';\r\nimport { CloseMessageDto, TextMessageDto, TypingMessageDto } from '@/core/events/transport/ws';\r\nimport {\r\n addMessage,\r\n AppStore,\r\n deleteMessage,\r\n patchMessage,\r\n setChannel,\r\n setCursorId,\r\n setError,\r\n} from '@/core/state';\r\nimport {\r\n createOperatorMessage,\r\n createSupportCompletedMarker,\r\n createUserMessage,\r\n} from '@/core/utils/message-factory';\r\nimport { SignalRError } from '@/infra/signalr/signalr-error';\r\n\r\nexport class SupportEffect {\r\n private connection?: HubConnection;\r\n private readonly typingTimeoutMs: number = 10_000;\r\n private readonly operatorMsgIdByOp = new Map<string, string>();\r\n private readonly typingTimeoutByOp = new Map<string, number>();\r\n\r\n constructor(\r\n private store: AppStore,\r\n private accessTokenProvider: AccessTokenProvider\r\n ) {}\r\n\r\n async start(baseUrl: string, conversationId: string) {\r\n if (this.connection) {\r\n await this.stop();\r\n }\r\n\r\n const url = new URL(baseUrl);\r\n const hubUrl = `${url.origin}/ws/support`;\r\n\r\n this.connection = new HubConnectionBuilder()\r\n .withUrl(hubUrl, {\r\n accessTokenFactory: () => this.accessTokenProvider.getAccessToken(),\r\n })\r\n .withAutomaticReconnect()\r\n .configureLogging(LogLevel.Information)\r\n .build();\r\n\r\n this.connection.on('Typing', (data: TypingMessageDto) => this.onTyping(data));\r\n this.connection.on('Text', (data: TextMessageDto) => this.onText(data));\r\n this.connection.on('Close', (data: CloseMessageDto) => this.onClose(data));\r\n\r\n this.connection.onclose((err) => {\r\n console.error('Support Hub connection closed.', err);\r\n if (err) this.onError(err);\r\n this.onSupportEnded();\r\n });\r\n\r\n try {\r\n await this.connection.start();\r\n await this.connection.invoke('JoinConversation', conversationId);\r\n } catch (err) {\r\n console.error('Failed to connect to support hub:', err);\r\n this.onError(err);\r\n }\r\n }\r\n\r\n async stop() {\r\n await this.connection?.stop();\r\n this.connection = undefined;\r\n for (const t of this.typingTimeoutByOp.values()) clearTimeout(t);\r\n this.typingTimeoutByOp.clear();\r\n this.operatorMsgIdByOp.clear();\r\n }\r\n\r\n async sendMessage(message: string) {\r\n if (!this.connection) return;\r\n this.store.dispatch(addMessage(createUserMessage(message)));\r\n try {\r\n await this.connection.invoke('SendMessage', message);\r\n } catch (err) {\r\n console.error('Failed to send message via SignalR:', err);\r\n this.onError(err);\r\n }\r\n }\r\n\r\n async sendTyping() {\r\n if (!this.connection) return;\r\n try {\r\n await this.connection.invoke('SendTyping');\r\n } catch (err) {\r\n console.error('Failed to send typing message via SignalR:', err);\r\n this.onError(err);\r\n }\r\n }\r\n\r\n async sendSeenMessage(messageId: string, seenAt: string) {\r\n if (!this.connection) return;\r\n try {\r\n await this.connection.invoke('SendSeen', messageId, seenAt);\r\n } catch (err) {\r\n console.error('Failed to send seen message via SignalR:', err);\r\n this.onError(err);\r\n }\r\n }\r\n\r\n async close() {\r\n if (!this.connection) return;\r\n try {\r\n await this.connection.invoke('SendClose');\r\n } catch (err) {\r\n console.error('Failed to close support connection via SignalR:', err);\r\n this.onError(err);\r\n }\r\n }\r\n\r\n private onError(err?: unknown) {\r\n this.store.dispatch(setError(toAppError(new SignalRError('Support connection error', err))));\r\n }\r\n\r\n private clearTyping(operatorId: string) {\r\n const t = this.typingTimeoutByOp.get(operatorId);\r\n if (t) clearTimeout(t);\r\n this.typingTimeoutByOp.delete(operatorId);\r\n }\r\n\r\n private scheduleTypingRemoval(operatorId: string) {\r\n this.clearTyping(operatorId);\r\n const id = window.setTimeout(() => {\r\n const msgId = this.operatorMsgIdByOp.get(operatorId);\r\n if (msgId) {\r\n this.store.dispatch(deleteMessage(msgId));\r\n }\r\n this.operatorMsgIdByOp.delete(operatorId);\r\n this.typingTimeoutByOp.delete(operatorId);\r\n }, this.typingTimeoutMs);\r\n this.typingTimeoutByOp.set(operatorId, id);\r\n }\r\n\r\n private async onTyping(data: TypingMessageDto) {\r\n const operator = data.operator;\r\n if (!operator) return;\r\n if (this.operatorMsgIdByOp.has(operator.id)) {\r\n this.store.dispatch(\r\n patchMessage(this.operatorMsgIdByOp.get(operator.id)!, { isTyping: true })\r\n );\r\n } else {\r\n const messageId = crypto.randomUUID();\r\n this.operatorMsgIdByOp.set(operator.id, messageId);\r\n this.store.dispatch(\r\n addMessage(\r\n createOperatorMessage(operator, '...', { idGen: () => messageId, isTyping: true })\r\n )\r\n );\r\n }\r\n this.scheduleTypingRemoval(operator.id);\r\n }\r\n\r\n private async onText(data: TextMessageDto) {\r\n const operator = data.operator;\r\n if (!operator) return;\r\n this.clearTyping(operator.id);\r\n const existingMsgId = this.operatorMsgIdByOp.get(operator.id);\r\n if (existingMsgId) {\r\n this.store.dispatch(\r\n patchMessage(existingMsgId, {\r\n content: data.content,\r\n isTyping: false,\r\n status: 'completed',\r\n })\r\n );\r\n this.operatorMsgIdByOp.delete(operator.id);\r\n } else {\r\n this.store.dispatch(\r\n addMessage(createOperatorMessage(operator, data.content, { status: 'completed' }))\r\n );\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private async onClose(_data: CloseMessageDto) {\r\n this.stop();\r\n }\r\n\r\n private onSupportEnded() {\r\n const marker = createSupportCompletedMarker();\r\n this.store.dispatch(addMessage(marker));\r\n this.store.dispatch(setCursorId(marker.messageId));\r\n this.store.dispatch(setChannel('assistant'));\r\n }\r\n}\r\n","import { ChatChannel } from '@/core/types';\r\n\r\nexport class PublicEvent<T> extends CustomEvent<T> {\r\n constructor(type: string, options?: CustomEventInit<T>) {\r\n super(type, { ...options, bubbles: true });\r\n }\r\n}\r\n\r\nexport class ConversationClearedEvent extends PublicEvent<void> {\r\n constructor() {\r\n super('conversation-cleared');\r\n }\r\n}\r\n\r\nexport class MessageSentEvent extends PublicEvent<{\r\n message: string;\r\n channel: ChatChannel;\r\n}> {\r\n constructor(message: string, channel: ChatChannel) {\r\n super('message-sent', { detail: { message, channel } });\r\n }\r\n}\r\n\r\nexport class ToolCallApprovedEvent extends PublicEvent<{\r\n turnId: string;\r\n messageId: string;\r\n}> {\r\n constructor(turnId: string, messageId: string) {\r\n super('tool-call-approved', { detail: { turnId, messageId } });\r\n }\r\n}\r\n\r\nexport class ToolCallDeclinedEvent extends PublicEvent<{\r\n turnId: string;\r\n messageId: string;\r\n}> {\r\n constructor(turnId: string, messageId: string) {\r\n super('tool-call-declined', { detail: { turnId, messageId } });\r\n }\r\n}\r\n\r\nexport class FeedbackSubmittedEvent extends PublicEvent<{\r\n rating: number;\r\n comment: string | null;\r\n}> {\r\n constructor(rating: number, comment: string | null) {\r\n super('feedback-submitted', { detail: { rating, comment } });\r\n }\r\n}\r\n\r\nexport class TokenUpdatedEvent extends PublicEvent<{\r\n expiresAt: number | null;\r\n token: string | null;\r\n}> {\r\n constructor(expiresAt: number | null, token: string | null) {\r\n super('token-updated', { detail: { expiresAt, token } });\r\n }\r\n}\r\n\r\nexport class TokenExpiringEvent extends PublicEvent<{\r\n expiresAt: number;\r\n remainingMs: number;\r\n}> {\r\n constructor(expiresAt: number, remainingMs: number) {\r\n super('token-expiring', { detail: { expiresAt, remainingMs } });\r\n }\r\n}\r\n\r\nexport class TokenExpiredEvent extends PublicEvent<{\r\n expiredAt: number;\r\n}> {\r\n constructor(expiredAt: number) {\r\n super('token-expired', { detail: { expiredAt } });\r\n }\r\n}\r\n\r\nexport class CloseRequestedEvent extends PublicEvent<void> {\r\n constructor() {\r\n super('close-requested');\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface GlobalEventHandlersEventMap {\r\n 'conversation-cleared': ConversationClearedEvent;\r\n 'message-sent': MessageSentEvent;\r\n 'tool-call-approved': ToolCallApprovedEvent;\r\n 'tool-call-declined': ToolCallDeclinedEvent;\r\n 'feedback-submitted': FeedbackSubmittedEvent;\r\n 'token-updated': TokenUpdatedEvent;\r\n 'token-expiring': TokenExpiringEvent;\r\n 'token-expired': TokenExpiredEvent;\r\n 'close-requested': CloseEvent;\r\n }\r\n}\r\n","import { AccessTokenProvider } from '@/auth/access-token-provider';\r\nimport pkg from 'package.json';\r\n\r\nimport { ApiError } from './api-error';\r\nimport { ensureOk } from './guards';\r\n\r\ntype ApiClientConfig = {\r\n baseUrl: string;\r\n fetchImpl: typeof fetch;\r\n};\r\n\r\nexport class ApiClient {\r\n private readonly version = pkg.version;\r\n\r\n constructor(\r\n public readonly authProvider: AccessTokenProvider,\r\n private readonly config: ApiClientConfig\r\n ) {}\r\n\r\n async request(input: RequestInfo | URL, init: RequestInit = {}) {\r\n const attempt = async () => {\r\n const token = await this.authProvider.getAccessToken();\r\n const headers = new Headers(init.headers || {});\r\n if (this.authProvider.strategyKind === 'visitor') {\r\n headers.set('VSN-Assistant-Visitor', token);\r\n } else {\r\n headers.set('Authorization', `Bearer ${token}`);\r\n }\r\n headers.set('App-Version', this.version);\r\n headers.set('App-Origin', window.location.href || '');\r\n return (this.config.fetchImpl ?? fetch)(this.formatUrl(input), { ...init, headers });\r\n };\r\n\r\n let res: Response;\r\n try {\r\n res = await attempt();\r\n } catch (e) {\r\n throw new ApiError('Network error', 0, this.formatUrl(input), e);\r\n }\r\n\r\n if (res.status === 401) {\r\n await this.authProvider.clear();\r\n try {\r\n res = await attempt();\r\n } catch (e) {\r\n throw new ApiError('Network error', 0, this.formatUrl(input), e);\r\n }\r\n if (res.status === 401) {\r\n throw new ApiError('Unauthorized', res.status, res.url);\r\n }\r\n }\r\n\r\n await ensureOk(res);\r\n return res;\r\n }\r\n\r\n private formatUrl(input: RequestInfo | URL) {\r\n const s = String(input);\r\n if (/^https?:\\/\\//i.test(s)) return s;\r\n return `${this.config.baseUrl}${s.startsWith('/') ? '' : '/'}${s}`;\r\n }\r\n}\r\n","import { BootstrapConfigResponse } from '@/services/bootstrap-service';\r\n\r\nimport type { IStorage } from './types';\r\n\r\ntype CachedConfig = {\r\n timestamp: number;\r\n data: BootstrapConfigResponse;\r\n};\r\n\r\nexport class BootstrapConfigStorage implements IStorage<BootstrapConfigResponse> {\r\n private readonly key = 'gaia-chat:bootstrap-config';\r\n private readonly ttlMs = 60 * 60 * 1000; // 60 minutes\r\n\r\n load(): BootstrapConfigResponse | null {\r\n const raw = localStorage.getItem(this.key);\r\n if (!raw) {\r\n return null;\r\n }\r\n\r\n try {\r\n const cachedItem = JSON.parse(raw) as CachedConfig;\r\n if (Date.now() - cachedItem.timestamp > this.ttlMs) {\r\n localStorage.removeItem(this.key);\r\n return null;\r\n }\r\n return cachedItem.data;\r\n } catch {\r\n localStorage.removeItem(this.key);\r\n return null;\r\n }\r\n }\r\n\r\n save(value: BootstrapConfigResponse): void {\r\n const item: CachedConfig = {\r\n timestamp: Date.now(),\r\n data: value,\r\n };\r\n localStorage.setItem(this.key, JSON.stringify(item));\r\n }\r\n\r\n clear(): void {\r\n localStorage.removeItem(this.key);\r\n }\r\n}\r\n","import type { ApiClient } from '@/infra/http/api-client';\r\nimport { ensureBodyJson } from '@/infra/http/guards';\r\nimport { BootstrapConfigStorage } from '@/infra/storage/bootstrap-config-storage';\r\n\r\nexport type WelcomeMessageContentBlock = {\r\n icon: string;\r\n text: string;\r\n};\r\n\r\nexport type WelcomeMessage = {\r\n title: string;\r\n body: string;\r\n blocks: ReadonlyArray<WelcomeMessageContentBlock>;\r\n callToAction: string;\r\n};\r\n\r\nexport type BootstrapConfigResponse = {\r\n welcomeMessages: Readonly<Record<string, WelcomeMessage>>;\r\n maxInputLength: number;\r\n};\r\n\r\nexport class BootstrapService {\r\n private readonly storage = new BootstrapConfigStorage();\r\n constructor(private readonly apiClient: ApiClient) {}\r\n\r\n async getBootstrapConfig(): Promise<BootstrapConfigResponse> {\r\n const cachedConfig = this.storage.load();\r\n if (cachedConfig) {\r\n return cachedConfig;\r\n }\r\n const res = await this.apiClient.request(`/api/v1/bootstrap`, {\r\n method: 'GET',\r\n });\r\n const config = await ensureBodyJson<BootstrapConfigResponse>(res);\r\n this.storage.save(config);\r\n return config;\r\n }\r\n\r\n clearBootstrapConfig() {\r\n this.storage.clear();\r\n }\r\n}\r\n","class ParseError extends Error {\n constructor(message, options) {\n super(message), this.name = \"ParseError\", this.type = options.type, this.field = options.field, this.value = options.value, this.line = options.line;\n }\n}\nfunction noop(_arg) {\n}\nfunction createParser(callbacks) {\n if (typeof callbacks == \"function\")\n throw new TypeError(\n \"`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?\"\n );\n const { onEvent = noop, onError = noop, onRetry = noop, onComment } = callbacks;\n let incompleteLine = \"\", isFirstChunk = !0, id, data = \"\", eventType = \"\";\n function feed(newChunk) {\n const chunk = isFirstChunk ? newChunk.replace(/^\\xEF\\xBB\\xBF/, \"\") : newChunk, [complete, incomplete] = splitLines(`${incompleteLine}${chunk}`);\n for (const line of complete)\n parseLine(line);\n incompleteLine = incomplete, isFirstChunk = !1;\n }\n function parseLine(line) {\n if (line === \"\") {\n dispatchEvent();\n return;\n }\n if (line.startsWith(\":\")) {\n onComment && onComment(line.slice(line.startsWith(\": \") ? 2 : 1));\n return;\n }\n const fieldSeparatorIndex = line.indexOf(\":\");\n if (fieldSeparatorIndex !== -1) {\n const field = line.slice(0, fieldSeparatorIndex), offset = line[fieldSeparatorIndex + 1] === \" \" ? 2 : 1, value = line.slice(fieldSeparatorIndex + offset);\n processField(field, value, line);\n return;\n }\n processField(line, \"\", line);\n }\n function processField(field, value, line) {\n switch (field) {\n case \"event\":\n eventType = value;\n break;\n case \"data\":\n data = `${data}${value}\n`;\n break;\n case \"id\":\n id = value.includes(\"\\0\") ? void 0 : value;\n break;\n case \"retry\":\n /^\\d+$/.test(value) ? onRetry(parseInt(value, 10)) : onError(\n new ParseError(`Invalid \\`retry\\` value: \"${value}\"`, {\n type: \"invalid-retry\",\n value,\n line\n })\n );\n break;\n default:\n onError(\n new ParseError(\n `Unknown field \"${field.length > 20 ? `${field.slice(0, 20)}\\u2026` : field}\"`,\n { type: \"unknown-field\", field, value, line }\n )\n );\n break;\n }\n }\n function dispatchEvent() {\n data.length > 0 && onEvent({\n id,\n event: eventType || void 0,\n // If the data buffer's last character is a U+000A LINE FEED (LF) character,\n // then remove the last character from the data buffer.\n data: data.endsWith(`\n`) ? data.slice(0, -1) : data\n }), id = void 0, data = \"\", eventType = \"\";\n }\n function reset(options = {}) {\n incompleteLine && options.consume && parseLine(incompleteLine), isFirstChunk = !0, id = void 0, data = \"\", eventType = \"\", incompleteLine = \"\";\n }\n return { feed, reset };\n}\nfunction splitLines(chunk) {\n const lines = [];\n let incompleteLine = \"\", searchIndex = 0;\n for (; searchIndex < chunk.length; ) {\n const crIndex = chunk.indexOf(\"\\r\", searchIndex), lfIndex = chunk.indexOf(`\n`, searchIndex);\n let lineEnd = -1;\n if (crIndex !== -1 && lfIndex !== -1 ? lineEnd = Math.min(crIndex, lfIndex) : crIndex !== -1 ? crIndex === chunk.length - 1 ? lineEnd = -1 : lineEnd = crIndex : lfIndex !== -1 && (lineEnd = lfIndex), lineEnd === -1) {\n incompleteLine = chunk.slice(searchIndex);\n break;\n } else {\n const line = chunk.slice(searchIndex, lineEnd);\n lines.push(line), searchIndex = lineEnd + 1, chunk[searchIndex - 1] === \"\\r\" && chunk[searchIndex] === `\n` && searchIndex++;\n }\n }\n return [lines, incompleteLine];\n}\nexport {\n ParseError,\n createParser\n};\n//# sourceMappingURL=index.js.map\n","import { createParser } from \"./index.js\";\nimport { ParseError } from \"./index.js\";\nclass EventSourceParserStream extends TransformStream {\n constructor({ onError, onRetry, onComment } = {}) {\n let parser;\n super({\n start(controller) {\n parser = createParser({\n onEvent: (event) => {\n controller.enqueue(event);\n },\n onError(error) {\n onError === \"terminate\" ? controller.error(error) : typeof onError == \"function\" && onError(error);\n },\n onRetry,\n onComment\n });\n },\n transform(chunk) {\n parser.feed(chunk);\n }\n });\n }\n}\nexport {\n EventSourceParserStream,\n ParseError\n};\n//# sourceMappingURL=stream.js.map\n","import { EventSourceParserStream } from 'eventsource-parser/stream';\r\n\r\nimport { StreamError } from './stream-error';\r\n\r\nexport async function* streamIterator(stream: ReadableStream, abortSignal?: AbortSignal) {\r\n const textStream = hasTextDecoderStream() ? new TextDecoderStream() : makeTextDecoderFallback();\r\n\r\n const eventStream = stream.pipeThrough(textStream).pipeThrough(new EventSourceParserStream());\r\n\r\n const reader = eventStream.getReader();\r\n\r\n try {\r\n while (true) {\r\n if (abortSignal?.aborted) break;\r\n const { value, done } = await reader.read();\r\n if (done) break;\r\n yield value;\r\n }\r\n } catch (e) {\r\n throw new StreamError(e);\r\n } finally {\r\n try {\r\n reader.releaseLock();\r\n } catch {\r\n // noop\r\n }\r\n try {\r\n await eventStream.cancel();\r\n } catch {\r\n // noop\r\n }\r\n }\r\n}\r\n\r\nfunction hasTextDecoderStream(): boolean {\r\n return typeof TextDecoderStream !== 'undefined';\r\n}\r\n\r\nfunction makeTextDecoderFallback(): TransformStream<Uint8Array, string> {\r\n const decoder = new TextDecoder();\r\n return new TransformStream<Uint8Array, string>({\r\n transform(chunk, controller) {\r\n controller.enqueue(decoder.decode(chunk, { stream: true }));\r\n },\r\n flush(controller) {\r\n controller.enqueue(decoder.decode());\r\n },\r\n });\r\n}\r\n","import type { EventSourceMessage } from 'eventsource-client';\r\n\r\nimport type { ChatSseEvent } from '@/core/events/transport/sse';\r\nimport type { Conversation } from '@/core/types';\r\nimport type { ApiClient } from '@/infra/http/api-client';\r\nimport { ensureBody, ensureBodyJson } from '@/infra/http/guards';\r\nimport { streamIterator } from '@/infra/sse/sse';\r\n\r\nexport type SendMessageRequest = {\r\n message: string;\r\n profileId: string;\r\n conversationId: string | null;\r\n partnerId: string | null;\r\n};\r\n\r\nexport type ApproveToolCallRequest = {\r\n conversationId: string;\r\n turnId: string;\r\n messageId: string;\r\n};\r\n\r\nexport type DeclineToolCallRequest = {\r\n conversationId: string;\r\n turnId: string;\r\n messageId: string;\r\n};\r\n\r\nexport class ChatService {\r\n constructor(private readonly apiClient: ApiClient) {}\r\n\r\n async *sendMessage(request: SendMessageRequest, abortSignal?: AbortSignal) {\r\n const res = await this.apiClient.request('/api/v1/conversations', {\r\n method: 'POST',\r\n body: JSON.stringify(request),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n signal: abortSignal,\r\n });\r\n\r\n const body = ensureBody(res);\r\n for await (const event of streamIterator(body, abortSignal)) {\r\n yield this.parseSseEvent(event);\r\n }\r\n }\r\n\r\n async *approveToolCall(request: ApproveToolCallRequest, abortSignal?: AbortSignal) {\r\n const res = await this.apiClient.request(\r\n `/api/v1/conversations/${request.conversationId}/turns/${request.turnId}/tool-call:approve-pending`,\r\n {\r\n method: 'POST',\r\n }\r\n );\r\n\r\n const body = ensureBody(res);\r\n for await (const event of streamIterator(body, abortSignal)) {\r\n yield this.parseSseEvent(event);\r\n }\r\n }\r\n\r\n async *declineToolCall(request: DeclineToolCallRequest, abortSignal?: AbortSignal) {\r\n const res = await this.apiClient.request(\r\n `/api/v1/conversations/${request.conversationId}/turns/${request.turnId}/tool-call:decline-pending`,\r\n {\r\n method: 'POST',\r\n }\r\n );\r\n\r\n const body = ensureBody(res);\r\n for await (const event of streamIterator(body, abortSignal)) {\r\n yield this.parseSseEvent(event);\r\n }\r\n }\r\n\r\n async getConversationHistory(conversationId: string): Promise<Conversation> {\r\n const res = await this.apiClient.request(\r\n `/api/v1/conversations/${encodeURIComponent(conversationId)}/history`,\r\n {\r\n method: 'GET',\r\n }\r\n );\r\n return ensureBodyJson(res);\r\n }\r\n\r\n private parseSseEvent(event: EventSourceMessage): ChatSseEvent {\r\n try {\r\n return {\r\n event: event.event,\r\n data: JSON.parse(event.data),\r\n } as ChatSseEvent;\r\n } catch {\r\n return {\r\n event: 'error',\r\n data: { message: 'Malformed server event' },\r\n } as ChatSseEvent;\r\n }\r\n }\r\n}\r\n","import type { ApiClient } from '@/infra/http/api-client';\r\n\r\nexport type SubmitFeedbackRequest = {\r\n conversationId: string;\r\n target: 'assistant' | 'support';\r\n score: number;\r\n comment: string | null;\r\n};\r\n\r\nexport class FeedbackService {\r\n constructor(private readonly apiClient: ApiClient) {}\r\n\r\n async submitFeedback(request: SubmitFeedbackRequest) {\r\n await this.apiClient.request(`/api/v1/feedback`, {\r\n method: 'POST',\r\n body: JSON.stringify(request),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n }\r\n}\r\n","import { msg } from '@lit/localize';\r\nimport type { ReactiveController, ReactiveControllerHost } from 'lit';\r\n\r\nimport { setError } from '@/core/state';\r\nimport { AppStore } from '@/core/state/store';\r\n\r\nexport class ErrorController implements ReactiveController {\r\n private readonly store: AppStore;\r\n\r\n constructor(host: ReactiveControllerHost & EventTarget, store: AppStore) {\r\n host.addController(this);\r\n this.store = store;\r\n }\r\n\r\n hostConnected() {\r\n window.addEventListener('offline', this.onOffline);\r\n window.addEventListener('online', this.onOnline);\r\n }\r\n hostDisconnected() {\r\n window.removeEventListener('offline', this.onOffline);\r\n window.removeEventListener('online', this.onOnline);\r\n }\r\n\r\n private onOffline = () => {\r\n this.store.dispatch(\r\n setError({\r\n code: 'NETWORK',\r\n message: msg(\"You're offline. Check your connection.\", { id: 'error-offline' }),\r\n retryable: false,\r\n source: 'ui',\r\n })\r\n );\r\n };\r\n\r\n private onOnline = () => {\r\n if (this.store.snapshot.ui.error?.code === 'NETWORK') this.store.dispatch(setError(null));\r\n };\r\n}\r\n","// Do not modify this file by hand!\n// Re-generate this file by running lit-localize.\n\n/**\n * The locale code that templates in this source code are written in.\n */\nexport const sourceLocale = `en`;\n\n/**\n * The other locale codes that this application is localized into. Sorted\n * lexicographically.\n */\nexport const targetLocales = [`nb`] as const;\n\n/**\n * All valid project locale codes. Sorted lexicographically.\n */\nexport const allLocales = [`en`, `nb`] as const;\n","import { configureLocalization } from '@lit/localize';\r\n\r\n// Generated via output.localeCodesModule\r\nimport { allLocales, sourceLocale, targetLocales } from '@/generated/locale-codes';\r\n\r\nexport const { getLocale, setLocale } = configureLocalization({\r\n sourceLocale,\r\n targetLocales,\r\n loadLocale: (locale) => import(`@/generated/locales/${locale}.ts`),\r\n});\r\n\r\nexport function parseLocaleCode(locale: string): string {\r\n const [language] = locale.split('-'); // only split once\r\n const normalized = language.toLowerCase();\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return allLocales.includes(normalized as any) ? normalized : sourceLocale;\r\n}\r\n","import classNames from 'classnames';\r\nimport { html, PropertyValues } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\n\r\nimport { AccessTokenProvider } from '@/auth/access-token-provider';\r\nimport { makeStrategy } from '@/auth/strategy-factory';\r\nimport { TwElement } from '@/components/base-tw-element';\r\nimport '@/components/composer';\r\nimport '@/components/menu';\r\nimport '@/components/message-list';\r\nimport { BootstrapEffect } from '@/core/effects/bootstrap-effect';\r\nimport { ConversationEffect } from '@/core/effects/conversation-effect';\r\nimport { FeedbackEffect } from '@/core/effects/feedback-effect';\r\nimport { StreamEffect } from '@/core/effects/stream-effect';\r\nimport { SupportEffect } from '@/core/effects/support-effect';\r\nimport {\r\n ApproveToolCallCommand,\r\n ClearConversationCommand,\r\n CloseChatCommand,\r\n DeclineToolCallCommand,\r\n MarkSeenCommand,\r\n SendMessageCommand,\r\n SendTypingCommand,\r\n SubmitFeedbackCommand,\r\n ToggleFeedbackFormCommand,\r\n} from '@/core/events/internal/commands';\r\nimport {\r\n CloseRequestedEvent,\r\n ConversationClearedEvent,\r\n FeedbackSubmittedEvent,\r\n MessageSentEvent,\r\n TokenExpiredEvent,\r\n TokenExpiringEvent,\r\n TokenUpdatedEvent,\r\n ToolCallApprovedEvent,\r\n ToolCallDeclinedEvent,\r\n} from '@/core/events/public/app';\r\nimport {\r\n AppState,\r\n AppStore,\r\n closeFeedbackForm,\r\n openFeedbackForm,\r\n selectMessages,\r\n setError,\r\n} from '@/core/state';\r\nimport type { UiMessage } from '@/core/types';\r\nimport { ApiClient } from '@/infra/http/api-client';\r\nimport { BootstrapService, WelcomeMessage } from '@/services/bootstrap-service';\r\nimport { ChatService } from '@/services/chat-service';\r\nimport { FeedbackService } from '@/services/feedback-service';\r\n\r\nimport { ErrorController } from './controllers/error-controller';\r\nimport { getLocale, parseLocaleCode, setLocale } from './localization';\r\n\r\n@customElement('gaia-chat')\r\nexport class ChatApp extends TwElement {\r\n @property({ type: String, attribute: 'base-url' })\r\n baseUrl: string = 'https://api.assistant.stag.vsn.dev';\r\n\r\n @property({ type: String, attribute: 'profile-id' })\r\n profileId: string = 'default';\r\n\r\n @property({ type: String, attribute: 'support-partner-id' })\r\n supportPartnerId?: string;\r\n\r\n @property({\r\n type: String,\r\n attribute: 'visma-token',\r\n reflect: false,\r\n })\r\n public vismaAccessToken?: string;\r\n\r\n @property({ type: Boolean, attribute: 'is-visitor' })\r\n isVisitor = false;\r\n\r\n @property({\r\n type: Boolean,\r\n attribute: 'closeable',\r\n reflect: true,\r\n converter: (value) => value === 'true' || value === '',\r\n })\r\n closeable = true;\r\n\r\n @state()\r\n private state: AppState | null = null;\r\n @state()\r\n private messages: UiMessage[] = [];\r\n @state()\r\n private isConnectedToSupport: boolean = false;\r\n @state()\r\n private welcomeMessages?: WelcomeMessage;\r\n\r\n private unsubscribe?: () => void;\r\n private store = new AppStore();\r\n private accessTokenProvider!: AccessTokenProvider;\r\n private apiClient!: ApiClient;\r\n private bootstrapEffect!: BootstrapEffect;\r\n private streamEffect!: StreamEffect;\r\n private supportEffect!: SupportEffect;\r\n private conversationEffect!: ConversationEffect;\r\n private feedbackEffect!: FeedbackEffect;\r\n\r\n override connectedCallback() {\r\n super.connectedCallback();\r\n\r\n if (!this.vismaAccessToken && !this.isVisitor) {\r\n throw new Error('Visma token is required when not in visitor mode');\r\n }\r\n\r\n if (!this.lang) {\r\n this.lang = this.ownerDocument.documentElement.lang;\r\n }\r\n setLocale(parseLocaleCode(this.lang));\r\n new ErrorController(this, this.store);\r\n\r\n this.checkPlatform();\r\n\r\n this.accessTokenProvider = new AccessTokenProvider({\r\n onUpdated: (expiresAt, token) => {\r\n this.dispatchEvent(new TokenUpdatedEvent(expiresAt, token));\r\n },\r\n onExpiring: (expiresAt, remainingMs) => {\r\n this.dispatchEvent(new TokenExpiringEvent(expiresAt, remainingMs));\r\n },\r\n onExpired: (expiredAt) => {\r\n this.dispatchEvent(new TokenExpiredEvent(expiredAt));\r\n },\r\n });\r\n\r\n const { kind, strategy } = makeStrategy(this.baseUrl, this.vismaAccessToken);\r\n this.accessTokenProvider.setStrategy(kind, strategy);\r\n\r\n this.apiClient = new ApiClient(this.accessTokenProvider, {\r\n baseUrl: this.baseUrl,\r\n fetchImpl: fetch,\r\n });\r\n\r\n const chatSvc = new ChatService(this.apiClient);\r\n this.bootstrapEffect = new BootstrapEffect(this.store, new BootstrapService(this.apiClient));\r\n this.streamEffect = new StreamEffect(this.store, chatSvc);\r\n this.supportEffect = new SupportEffect(this.store, this.accessTokenProvider);\r\n this.conversationEffect = new ConversationEffect(this.store, chatSvc);\r\n this.feedbackEffect = new FeedbackEffect(this.store, new FeedbackService(this.apiClient));\r\n\r\n this.unsubscribe = this.store.subscribe((state) => {\r\n const oldState = this.state;\r\n this.state = state;\r\n this.messages = selectMessages(state);\r\n this.isConnectedToSupport = state.session.channel === 'support';\r\n this.welcomeMessages = state.config.welcomeMessages[getLocale()];\r\n\r\n if (this.isConnectedToSupport && oldState?.session.channel !== 'support') {\r\n this.supportEffect?.start(this.baseUrl, this.store.snapshot.session.conversationId!);\r\n }\r\n });\r\n }\r\n\r\n override disconnectedCallback() {\r\n super.disconnectedCallback();\r\n this.unsubscribe?.();\r\n this.supportEffect?.stop();\r\n }\r\n\r\n private async onPrincipalChanged(\r\n oldVismaToken: string | undefined,\r\n newVismaToken: string | undefined,\r\n oldIsVisitor: boolean | undefined,\r\n newIsVisitor: boolean | undefined\r\n ) {\r\n if (oldVismaToken === newVismaToken && oldIsVisitor === newIsVisitor) return;\r\n const currentIdentifier = await this.accessTokenProvider.getIdentifier();\r\n\r\n const { kind, strategy } = makeStrategy(this.baseUrl, newVismaToken);\r\n this.accessTokenProvider.setStrategy(kind, strategy);\r\n const newIdentifier = await this.accessTokenProvider.getIdentifier();\r\n\r\n const hasChangedToVisma = !oldVismaToken && !!newVismaToken;\r\n const hasChangedToVisitor = !oldIsVisitor && !!newIsVisitor;\r\n const hasUserIdentityChanged = newIdentifier !== currentIdentifier;\r\n const hasPrincipalChanged = hasChangedToVisma || hasChangedToVisitor || hasUserIdentityChanged;\r\n if (hasPrincipalChanged) {\r\n this.bootstrapEffect.clear();\r\n this.streamEffect.abortCurrentTask?.();\r\n this.supportEffect.close();\r\n this.supportEffect.stop();\r\n }\r\n this.bootstrapEffect.initialize();\r\n this.conversationEffect.getHistory();\r\n }\r\n\r\n override updated(changedProperties: PropertyValues) {\r\n super.updated(changedProperties);\r\n if (changedProperties.has('vismaAccessToken') || changedProperties.has('isVisitor')) {\r\n this.onPrincipalChanged(\r\n changedProperties.get('vismaAccessToken') as string | undefined,\r\n this.vismaAccessToken,\r\n changedProperties.get('isVisitor') as boolean | undefined,\r\n this.isVisitor\r\n );\r\n }\r\n }\r\n\r\n private checkPlatform() {\r\n const userAgent = window.navigator.userAgent;\r\n let platform: 'windows' | 'macos' | 'unknown' = 'unknown';\r\n\r\n if (userAgent.indexOf('Win') !== -1) {\r\n platform = 'windows';\r\n } else if (userAgent.indexOf('Mac') !== -1) {\r\n platform = 'macos';\r\n } else {\r\n platform = 'unknown';\r\n }\r\n this.setAttribute('data-platform', platform);\r\n }\r\n\r\n private async onSendMessage(e: SendMessageCommand) {\r\n e.stopPropagation();\r\n const text = e.detail.message;\r\n if (!text || !this.streamEffect) return;\r\n\r\n this.closeFeedbackIfOpen();\r\n\r\n if (this.isConnectedToSupport) {\r\n this.supportEffect!.sendMessage(text);\r\n this.dispatchEvent(new MessageSentEvent(text, 'support'));\r\n } else {\r\n this.streamEffect?.sendMessage(text, this.profileId, this.supportPartnerId);\r\n this.dispatchEvent(new MessageSentEvent(text, 'assistant'));\r\n }\r\n }\r\n\r\n private onApproveToolCall(e: ApproveToolCallCommand) {\r\n e.stopPropagation();\r\n this.closeFeedbackIfOpen();\r\n this.streamEffect?.approveToolCall(e.detail.turnId, e.detail.messageId);\r\n this.dispatchEvent(new ToolCallApprovedEvent(e.detail.turnId, e.detail.messageId));\r\n }\r\n\r\n private onDeclineToolCall(e: DeclineToolCallCommand) {\r\n e.stopPropagation();\r\n this.closeFeedbackIfOpen();\r\n this.streamEffect?.declineToolCall(e.detail.turnId, e.detail.messageId);\r\n this.dispatchEvent(new ToolCallDeclinedEvent(e.detail.turnId, e.detail.messageId));\r\n }\r\n\r\n private onSubmitFeedback(e: SubmitFeedbackCommand) {\r\n e.stopPropagation();\r\n this.feedbackEffect?.submitFeedback(e.detail.target, e.detail.rating, e.detail.comment);\r\n this.dispatchEvent(new FeedbackSubmittedEvent(e.detail.rating, e.detail.comment));\r\n }\r\n\r\n private onToggleFeedbackForm(e: ToggleFeedbackFormCommand) {\r\n e.stopPropagation();\r\n if (e.detail.target) {\r\n this.store.dispatch(openFeedbackForm(e.detail.target));\r\n } else {\r\n this.store.dispatch(closeFeedbackForm());\r\n }\r\n }\r\n\r\n private onClearConversation(e: ClearConversationCommand) {\r\n e.stopPropagation();\r\n this.conversationEffect?.clear();\r\n this.supportEffect?.stop();\r\n this.dispatchEvent(new ConversationClearedEvent());\r\n }\r\n\r\n private onClearError() {\r\n this.store.dispatch(setError(null));\r\n }\r\n\r\n private closeFeedbackIfOpen() {\r\n if (this.state?.ui.feedbackFormOpen) {\r\n this.store.dispatch(closeFeedbackForm());\r\n }\r\n }\r\n\r\n private onSendTyping(e: SendTypingCommand) {\r\n e.stopPropagation();\r\n if (this.isConnectedToSupport) {\r\n this.supportEffect?.sendTyping();\r\n }\r\n }\r\n\r\n // + NEW\r\n private onMarkSeen(e: MarkSeenCommand) {\r\n e.stopPropagation();\r\n if (this.isConnectedToSupport) {\r\n const { messageId, seenAt } = e.detail;\r\n this.supportEffect?.sendSeenMessage(messageId, seenAt);\r\n }\r\n }\r\n\r\n private onCloseChat(e: CloseChatCommand) {\r\n e.stopPropagation();\r\n this.dispatchEvent(new CloseRequestedEvent());\r\n }\r\n\r\n override render() {\r\n return html`\r\n <div\r\n class=${classNames(\r\n \"@container/main grid h-full w-full [grid-template-rows:auto_1fr_auto] overflow-hidden [grid-template-areas:'header''content''footer']\",\r\n {\r\n 'border border-solid border-neutral-300 shadow-md': this.closeable,\r\n }\r\n )}\r\n >\r\n <gaia-chat-menu\r\n .hasEmptyMessages=${this.messages.length === 0}\r\n class=\"[grid-area:header]\"\r\n .disabled=${!this.state!.session.isActive}\r\n .closeable=${this.closeable}\r\n @clear-conversation=${this.onClearConversation}\r\n @toggle-feedback-form=${this.onToggleFeedbackForm}\r\n @close-chat=${this.onCloseChat}\r\n ></gaia-chat-menu>\r\n <gaia-chat-message-list\r\n .messages=${this.messages}\r\n .isInitialized=${this.state!.config.initialized}\r\n .isThinking=${this.state!.session.isThinking}\r\n .feedbackFormOpen=${this.state!.ui.feedbackFormOpen}\r\n .feedbackFormTarget=${this.state!.ui.feedbackFormTarget}\r\n .error=${this.state!.ui.error ?? null}\r\n .isConnectedToSupport=${this.isConnectedToSupport}\r\n .welcomeMessages=${this.welcomeMessages}\r\n @clear-conversation=${this.onClearConversation}\r\n @approve-tool-call=${this.onApproveToolCall}\r\n @decline-tool-call=${this.onDeclineToolCall}\r\n @submit-feedback=${this.onSubmitFeedback}\r\n @toggle-feedback-form=${this.onToggleFeedbackForm}\r\n @clear-error=${this.onClearError}\r\n @mark-seen=${this.onMarkSeen}\r\n class=\"overflow-hidden [grid-area:content]\"\r\n ></gaia-chat-message-list>\r\n <gaia-chat-composer\r\n class=\"[grid-area:footer]\"\r\n .disabled=${!this.state!.session.isActive}\r\n .loading=${this.state!.session.isBusy}\r\n .maxInputLength=${this.state!.config.maxInputLength}\r\n @send-message=${this.onSendMessage}\r\n @send-typing=${this.onSendTyping}\r\n ></gaia-chat-composer>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'gaia-chat': ChatApp;\r\n }\r\n}\r\n"],"names":["hasOwn","classNames","classes","arg","appendClass","parseValue","key","value","newClass","module","AccessTokenProvider","listeners","kind","strategy","ApiError","message","status","url","innerError","bodyText","problem","buildApiError","res","text","ct","msg","ensureOk","ensureBody","ensureBodyJson","VisitorTokenStorage","InvalidTokenError","b64DecodeUnicode","str","m","p","code","base64UrlDecode","output","jwtDecode","token","options","pos","part","decoded","e","AuthStrategy","expiringBufferMs","now","remainingMs","VisitorTokenStrategy","baseUrl","storage","fetchImpl","allowExpired","accessToken","VismaTokenStrategy","initialToken","makeStrategy","vismaToken","LOCALE_STATUS_EVENT","_str","strings","values","isStrTagged","val","joinStringsAndValues","valueOrder","concat","i","defaultMsg","template","installed","_installMsgImplementation","impl","LocalizeController","host","event","_updateWhenLocaleChanges","updateWhenLocaleChanges","localized","clazz","_context","Deferred","resolve","reject","error","hl","fnv1a64","t0","v0","t1","v1","t2","v2","t3","v3","HASH_DELIMITER","HTML_PREFIX","STRING_PREFIX","generateMsgId","isHtmlTagged","expressionOrders","hashCache","runtimeMsg","templates","id","generateId","order","dispatchStatusEvent","detail","activeLocale","loadingLocale","sourceLocale","validLocales","loadLocale","loading","requestId","configureLocalization","config","getLocale","setLocale","newLocale","thisRequestId","mod","err","TwElement","LitElement","adoptStyles","unsafeCSS","cssString","__decorateClass","arrowUpSvg","circleAlertSvg","SendMessageCommand","ApproveToolCallCommand","turnId","messageId","DeclineToolCallCommand","SubmitFeedbackCommand","target","rating","comment","ToggleFeedbackFormCommand","ClearConversationCommand","ClearErrorCommand","SendTypingCommand","CloseChatCommand","Composer","html","live","unsafeSVG","nothing","property","state","query","customElement","megaphoneSvg","minimize2Svg","squarePenSvg","Menu","unsafeHTML","xSvg","ErrorMessage","sendSvg","FeedbackForm","createRef","map","ref","checkSvg","chevronDownSvg","circleXSvg","fileSvg","sparklesSvg","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","apply","construct","x","fun","thisValue","args","Func","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","func","thisArg","_len","_key","_len2","_key2","addToSet","set","array","transformCaseFunc","l","element","lcElement","cleanArray","index","clone","object","newObject","lookupGetter","prop","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","NODE_TYPE","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","suffix","ATTR_NAME","policyName","scriptUrl","_createHooksMap","createDOMPurify","window","DOMPurify","root","document","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","remove","getNextSibling","getChildNodes","getParentNode","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","parentTagName","_forceRemove","node","_removeAttribute","name","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","body","_createNodeIterator","_isClobbered","_isNode","_executeHooks","currentNode","data","hook","_sanitizeElements","content","_isBasicCustomElement","parentNode","childNodes","childCount","childClone","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attributes","hookEvent","attr","namespaceURI","attrValue","initValue","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","tag","entryPoint","hookFunction","purify","L","O","H","E","h","s","xe","be","Re","C","Oe","j","se","ie","Te","F","we","Q","ye","Pe","v","U","Se","oe","$e","K","re","_e","Le","Me","ze","ae","Ae","D","W","le","Ee","ue","Ce","Ie","Be","pe","qe","ve","ce","De","Ze","Ge","He","Ne","je","Fe","q","Qe","he","de","Ue","X","Ke","N","We","I","M","Xe","ke","w","J","V","o","a","u","z","ge","fe","Je","y","t","n","r","c","f","k","g","T","Z","ee","te","ne","me","G","A","Y","b","P","S","R","$","B","_","d","renderer","marked","wrap","hookInstalled","renderMarkdown","md","raw","BaseMessage","AssistantMessage","guard","repeat","citation","headsetSvg","OperatorMessage","SystemMessage","UserMessage","ThinkingIndicator","lightbulbSvg","messageCircleSvg","iconMap","WelcomeMessageComponent","welcomeMessages","block","icon","MessageList","changedProperties","prevMsgs","prevLength","hasChanged","hasNewMessage","$wrapper","msgs","latest","SignalRError","StreamError","errorType","toAppError","initialConfigState","setInitialized","setConfig","clearConfig","configReducer","action","initialMessagesState","setMessages","addMessage","deleteMessage","patchMessage","patch","addContentDelta","delta","messagesReducer","acc","newEntities","prev","initialSessionState","setConversationId","setCursorId","setChannel","channel","setThinking","thinking","setBusy","busy","sessionReducer","initialUiState","openFeedbackForm","closeFeedbackForm","setError","pushError","uiReducer","stack","initialRootState","APP_RESET","resetAll","rootReducer","AppStore","reducer","initialState","listener","selectMessages","lastIds","lastEntities","lastResult","BootstrapEffect","store","svc","ConversationIdStorage","ConversationEffect","conversationId","convo","FeedbackEffect","defaultIdGen","defaultClock","createUserMessage","createSupportCompletedMarker","createOperatorMessage","operator","makeSseHandlers","cur","TaskRunner","fn","StreamEffect","profileId","partnerId","userId","task","signal","stream","evt","HttpError","errorMessage","statusCode","trueProto","TimeoutError","AbortError","UnsupportedTransportError","transport","DisabledTransportError","FailedToStartTransportError","FailedToNegotiateWithServerError","AggregateErrors","innerErrors","HttpResponse","statusText","HttpClient","LogLevel","NullLogger","_logLevel","_message","VERSION","Arg","Platform","getDataDetail","includeContent","isArrayBuffer","formatArrayBuffer","view","num","pad","sendMessage","logger","transportName","httpClient","headers","getUserAgentHeader","responseType","response","createLogger","ConsoleLogger","SubjectSubscription","subject","observer","minimumLogLevel","logLevel","userAgentHeaderName","constructUserAgent","getOsName","getRuntime","getRuntimeVersion","version","os","runtime","runtimeVersion","userAgent","majorAndMinor","getErrorString","getGlobalThis","FetchHttpClient","requireFunc","request","abortController","timeoutId","msTimeout","deserializeContent","payload","cookies","XhrHttpClient","xhr","header","DefaultHttpClient","TextMessageFormat","input","messages","HandshakeProtocol","handshakeRequest","messageData","remainingData","binaryData","separatorIndex","responseLength","textData","MessageType","Subject","item","MessageBuffer","protocol","connection","bufferSize","serializedMessage","backpressurePromise","backpressurePromiseResolver","backpressurePromiseRejector","BufferedItem","ackMessage","newestAckedMessage","currentId","sequenceId","resolver","rejector","DEFAULT_TIMEOUT_IN_MS","DEFAULT_PING_INTERVAL_IN_MS","DEFAULT_STATEFUL_RECONNECT_BUFFER_SIZE","HubConnectionState","HubConnection","reconnectPolicy","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","statefulReconnectBufferSize","handshakePromise","startPromise","methodName","streams","streamIds","invocationDescriptor","promiseQueue","cancelInvocation","invocationEvent","sendPromise","newMethod","method","handlers","removeIdx","callback","responseMessage","nextPing","invocationMessage","methods","methodsCopy","expectsResponse","exception","completionMessage","prevRes","reconnectStartTime","previousReconnectAttempts","retryError","nextRetryDelay","previousRetryCount","elapsedMilliseconds","retryReason","callbacks","nonblocking","invocationId","streamId","argument","result","DEFAULT_RETRY_DELAYS_IN_MILLISECONDS","DefaultReconnectPolicy","retryDelays","retryContext","HeaderNames","AccessTokenHttpClient","innerClient","accessTokenFactory","allowRetry","HttpTransportType","TransferFormat","AbortController$1","LongPollingTransport","AbortController","transferFormat","pollOptions","pollUrl","deleteOptions","logMessage","ServerSentEventsTransport","opened","eventSource","WebSocketTransport","logMessageContent","webSocketConstructor","webSocket","_event","MAX_REDIRECTS","HttpConnection","webSocketModule","eventSourceModule","TransportSendQueue","negotiateResponse","redirects","negotiateUrl","connectionToken","requestedTransport","requestedTransferFormat","connectUrl","transportExceptions","transports","negotiate","endpoint","transportOrError","ex","callStop","useStatefulReconnect","transportMatches","aTag","searchParams","actualTransport","_transport","PromiseSource","transportResult","arrayBuffers","totalLength","offset","reason","JSON_HUB_PROTOCOL_NAME","JsonHubProtocol","hubMessages","parsedMessage","LogLevelNameMapping","parseLogLevel","mapping","HubConnectionBuilder","logging","isLogger","transportTypeOrOptions","retryDelaysOrReconnectPolicy","milliseconds","httpConnectionOptions","SupportEffect","accessTokenProvider","hubUrl","seenAt","operatorId","msgId","existingMsgId","_data","marker","PublicEvent","type","ConversationClearedEvent","MessageSentEvent","ToolCallApprovedEvent","ToolCallDeclinedEvent","FeedbackSubmittedEvent","TokenUpdatedEvent","expiresAt","TokenExpiringEvent","TokenExpiredEvent","expiredAt","CloseRequestedEvent","ApiClient","authProvider","pkg","init","attempt","BootstrapConfigStorage","cachedItem","BootstrapService","apiClient","cachedConfig","ParseError","noop","_arg","createParser","onEvent","onError","onRetry","onComment","incompleteLine","isFirstChunk","eventType","feed","newChunk","chunk","complete","incomplete","splitLines","line","parseLine","dispatchEvent","fieldSeparatorIndex","field","processField","reset","lines","searchIndex","crIndex","lfIndex","lineEnd","EventSourceParserStream","parser","controller","streamIterator","abortSignal","textStream","hasTextDecoderStream","makeTextDecoderFallback","eventStream","reader","done","decoder","ChatService","FeedbackService","ErrorController","targetLocales","allLocales","locale","__variableDynamicImportRuntimeHelper","parseLocaleCode","language","normalized","ChatApp","chatSvc","oldState","oldVismaToken","newVismaToken","oldIsVisitor","newIsVisitor","currentIdentifier","newIdentifier","platform"],"mappings":"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","x_google_ignoreList":[0,5,10,11,12,13,14,15,16,17,18,19,20,39,40,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,102,103]}
|