@opencx/widget 3.0.88 → 3.0.90
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/designs.cjs +47 -19
- package/dist/designs.cjs.map +1 -1
- package/dist/designs.js +16252 -1279
- package/dist/designs.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -6
- package/dist/index.js.map +1 -1
- package/dist/is-exhaustive-9o43S91P.cjs +2 -0
- package/dist/is-exhaustive-9o43S91P.cjs.map +1 -0
- package/dist/is-exhaustive-DGJzQK69.js +7 -0
- package/dist/is-exhaustive-DGJzQK69.js.map +1 -0
- package/dist/react.cjs +1 -1
- package/dist/react.js +2 -2
- package/dist/{useModes-DleBrdDK.js → useModes-B3IdrBWZ.js} +34 -33
- package/dist/{useModes-DleBrdDK.js.map → useModes-B3IdrBWZ.js.map} +1 -1
- package/dist/useModes-ZmjqOTMd.cjs +2 -0
- package/dist/{useModes-DSFNdOy3.cjs.map → useModes-ZmjqOTMd.cjs.map} +1 -1
- package/dist/widget.ctx-6xcbtF7q.cjs +5 -0
- package/dist/widget.ctx-6xcbtF7q.cjs.map +1 -0
- package/dist/widget.ctx-uAWzif3-.js +688 -0
- package/dist/widget.ctx-uAWzif3-.js.map +1 -0
- package/dist-embed/script.js +1 -1
- package/package.json +1 -4
- package/dist/useModes-DSFNdOy3.cjs +0 -2
- package/dist/widget.ctx-CC3c7FPb.js +0 -1542
- package/dist/widget.ctx-CC3c7FPb.js.map +0 -1
- package/dist/widget.ctx-HuLTTMAM.cjs +0 -5
- package/dist/widget.ctx-HuLTTMAM.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"widget.ctx-HuLTTMAM.cjs","sources":["../node_modules/.pnpm/openapi-fetch@0.13.4/node_modules/openapi-fetch/dist/index.js","../src/headless/core/api/client.ts","../src/headless/core/api/api-caller.ts","../node_modules/.pnpm/lodash.isequal@4.5.0/node_modules/lodash.isequal/index.js","../src/headless/core/utils/PrimitiveState.ts","../src/headless/core/utils/Poller.ts","../src/headless/core/utils/run-catching.ts","../src/headless/core/context/active-session-polling.ctx.ts","../node_modules/.pnpm/uuid@11.0.4/node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/.pnpm/uuid@11.0.4/node_modules/uuid/dist/esm-browser/rng.js","../node_modules/.pnpm/uuid@11.0.4/node_modules/uuid/dist/esm-browser/native.js","../node_modules/.pnpm/uuid@11.0.4/node_modules/uuid/dist/esm-browser/v4.js","../src/headless/core/context/contact.ctx.ts","../src/headless/core/utils/uuid.ts","../src/headless/core/context/session.ctx.ts","../src/headless/core/context/message.ctx.ts","../src/headless/core/context/router.ctx.ts","../src/headless/core/context/storage.ctx.ts","../src/headless/core/context/widget.ctx.ts"],"sourcesContent":["// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nconst supportsRequestInitExt = () => {\n return (\n typeof process === \"object\" &&\n Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 &&\n process.versions.undici\n );\n};\n\n/**\n * Returns a cheap, non-cryptographically-secure random ID\n * Courtesy of @imranbarbhuiya (https://github.com/imranbarbhuiya)\n */\nexport function randomID() {\n return Math.random().toString(36).slice(2, 11);\n}\n\n/**\n * Create an openapi-fetch client.\n * @type {import(\"./index.js\").default}\n */\nexport default function createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n headers: baseHeaders,\n requestInitExt = undefined,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n baseUrl = removeTrailingSlash(baseUrl);\n const middlewares = [];\n\n /**\n * Per-request fetch (keeps settings created in createClient()\n * @param {T} url\n * @param {import('./index.js').FetchOptions<T>} fetchOptions\n */\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n body,\n ...init\n } = fetchOptions || {};\n if (localBaseUrl) {\n baseUrl = removeTrailingSlash(localBaseUrl);\n }\n\n let querySerializer =\n typeof globalQuerySerializer === \"function\"\n ? globalQuerySerializer\n : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer =\n typeof requestQuerySerializer === \"function\"\n ? requestQuerySerializer\n : createQuerySerializer({\n ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n ...requestQuerySerializer,\n });\n }\n\n const serializedBody = body === undefined ? undefined : bodySerializer(body);\n\n const defaultHeaders =\n // with no body, we should not to set Content-Type\n serializedBody === undefined ||\n // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n serializedBody instanceof FormData\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n };\n\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: mergeHeaders(defaultHeaders, baseHeaders, headers, params.header),\n };\n\n let id;\n let options;\n let request = new CustomRequest(createFinalURL(schemaPath, { baseUrl, params, querySerializer }), requestInit);\n\n /** Add custom parameters to Request object */\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n\n if (middlewares.length) {\n id = randomID();\n\n // middleware (request)\n options = Object.freeze({\n baseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n });\n for (const m of middlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!(result instanceof CustomRequest)) {\n throw new Error(\"onRequest: must return new Request() when modifying the request\");\n }\n request = result;\n }\n }\n }\n }\n\n // fetch!\n let response;\n try {\n response = await fetch(request, requestInitExt);\n } catch (error) {\n let errorAfterMiddleware = error;\n // middleware (error)\n // execute in reverse-array order (first priority gets last transform)\n if (middlewares.length) {\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const m = middlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n // if error is handled by returning a response, skip remaining middleware\n if (result instanceof Response) {\n errorAfterMiddleware = undefined;\n response = result;\n break;\n }\n\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n\n // rethrow error if not handled by middleware\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n\n // middleware (response)\n // execute in reverse-array order (first priority gets last transform)\n if (middlewares.length) {\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const m = middlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!(result instanceof Response)) {\n throw new Error(\"onResponse: must return new Response() when modifying the response\");\n }\n response = result;\n }\n }\n }\n }\n\n // handle empty content\n if (response.status === 204 || response.headers.get(\"Content-Length\") === \"0\") {\n return response.ok ? { data: undefined, response } : { error: undefined, response };\n }\n\n // parse response (falling back to .text() when necessary)\n if (response.ok) {\n // if \"stream\", skip parsing entirely\n if (parseAs === \"stream\") {\n return { data: response.body, response };\n }\n return { data: await response[parseAs](), response };\n }\n\n // handle errors\n let error = await response.text();\n try {\n error = JSON.parse(error); // attempt to parse as JSON\n } catch {\n // noop\n }\n return { error, response };\n }\n\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n }\n middlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = middlewares.indexOf(m);\n if (i !== -1) {\n middlewares.splice(i, 1);\n }\n }\n },\n };\n}\n\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n\n GET(init) {\n return this.client.GET(this.url, init);\n }\n PUT(init) {\n return this.client.PUT(this.url, init);\n }\n POST(init) {\n return this.client.POST(this.url, init);\n }\n DELETE(init) {\n return this.client.DELETE(this.url, init);\n }\n OPTIONS(init) {\n return this.client.OPTIONS(this.url, init);\n }\n HEAD(init) {\n return this.client.HEAD(this.url, init);\n }\n PATCH(init) {\n return this.client.PATCH(this.url, init);\n }\n TRACE(init) {\n return this.client.TRACE(this.url, init);\n }\n}\n\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\n\n/**\n * Wrap openapi-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n\n // Put the proxy on the prototype chain of the actual client.\n // This means if we do not have a memoized PathCallForwarder,\n // we fall back to the proxy to synthesize it.\n // However, the proxy itself is not on the hot-path (if we fetch the same\n // endpoint multiple times, only the first call will hit the proxy).\n function Client() {}\n Client.prototype = proxy;\n\n const client = new Client();\n\n // Feed the client back to the proxy handler so it can store the generated\n // PathCallForwarder.\n handler.client = client;\n\n return client;\n}\n\n/**\n * Convenience method to an openapi-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner =\n {\n simple: \",\",\n label: \".\",\n matrix: \";\",\n }[options.style] || \"&\";\n\n // explode: false\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n }\n const final = values.join(\",\"); // note: values are always joined by comma in explode: false (but joiner can prefix)\n switch (options.style) {\n case \"form\": {\n return `${name}=${final}`;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n return final;\n }\n }\n }\n\n // explode: true\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n\n // explode: false\n if (options.explode === false) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\"; // note: for arrays, joiners vary wildly based on style + explode behavior\n const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n\n // explode: true\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\"\n ? `${joiner}${values.join(joiner)}`\n : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n if (Array.isArray(value)) {\n nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n continue;\n }\n if (typeof value === \"object\") {\n nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n continue;\n }\n if (style === \"matrix\") {\n nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n continue;\n }\n nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n }\n return nextURL;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body) {\n if (body instanceof FormData) {\n return body;\n }\n return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = defaultPathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n finalURL += `?${search}`;\n }\n return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== undefined) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n","import createClient, { type Middleware } from 'openapi-fetch';\nimport type { paths } from './schema';\nimport type { components } from './schema';\n\ntype Options = {\n baseUrl: string;\n onRequest?: Middleware['onRequest'];\n onResponse?: Middleware['onResponse'];\n onError?: Middleware['onError'];\n};\n\nconst defaultOnError: Middleware['onError'] = (onErrorOptions) => {\n console.log(onErrorOptions.error);\n};\n\nexport const basicClient = (options: Options) => {\n const client = createClient<paths>({\n baseUrl: options.baseUrl,\n });\n\n const middlewares: Middleware = {\n onRequest: options.onRequest,\n onResponse: options.onResponse,\n onError: options.onError || defaultOnError,\n };\n\n client.use(middlewares);\n return client;\n};\n\nexport type Endpoint = keyof paths;\nexport type Dto = components['schemas'];\n","import { type Dto, type Endpoint, basicClient } from './client';\nimport type { WidgetConfig } from '../types/widget-config';\nimport type {\n ResolveSessionDto,\n SendMessageDto,\n VoteInputDto,\n} from '../types/dtos';\n\nexport class ApiCaller {\n private client: ReturnType<typeof basicClient>;\n private config: WidgetConfig;\n private userToken: string | null = null;\n\n constructor({ config }: { config: WidgetConfig }) {\n this.config = config;\n this.userToken = config.user?.token || null;\n\n const { baseUrl, headers } = this.constructClientOptions(\n config.user?.token,\n );\n this.client = this.createOpenAPIClient({ baseUrl, headers });\n }\n\n private constructClientOptions = (token: string | null | undefined) => {\n const baseUrl =\n import.meta.env.MODE === 'test'\n ? 'http://localhost:8080'\n : this.config.apiUrl || 'https://api.open.cx';\n const headers = {\n 'X-Bot-Token': this.config.token,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n Authorization: token ? `Bearer ${token}` : undefined,\n };\n\n return { baseUrl, headers };\n };\n\n private createOpenAPIClient = ({\n baseUrl,\n headers,\n }: ReturnType<typeof this.constructClientOptions>) => {\n return basicClient({\n baseUrl,\n onRequest: ({ request }) => {\n Object.entries(headers).forEach(([key, value]) => {\n if (value) {\n request.headers.set(key, value);\n }\n });\n },\n });\n };\n\n setAuthToken = (token: string) => {\n this.userToken = token;\n const { baseUrl, headers } = this.constructClientOptions(token);\n this.client = this.createOpenAPIClient({ baseUrl, headers });\n };\n\n getExternalWidgetConfig = async () => {\n return await this.client.GET('/backend/widget/v2/config', {\n params: { header: { 'X-Bot-Token': this.config.token } },\n });\n };\n\n widgetPrelude = async () => {\n return await this.client.GET('/backend/widget/v2/prelude', {\n params: { header: { 'X-Bot-Token': this.config.token } },\n });\n };\n\n sendMessage = async (body: SendMessageDto, abortSignal?: AbortSignal) => {\n return await this.client.POST('/backend/widget/v2/chat/send', {\n body,\n signal: abortSignal,\n });\n };\n\n createUnverifiedContact = async (body: Dto['CreateUnverifiedContactDto']) => {\n return await this.client.POST(\n '/backend/widget/v2/contact/create-unverified',\n {\n params: { header: { 'x-bot-token': this.config.token } },\n body,\n },\n );\n };\n\n createSession = async (body: Dto['CreateWidgetSessionDto']) => {\n return await this.client.POST('/backend/widget/v2/create-session', {\n body,\n });\n };\n\n pollSessionAndHistory = async ({\n sessionId,\n lastMessageTimestamp,\n abortSignal,\n }: {\n sessionId: string;\n lastMessageTimestamp?: string;\n abortSignal: AbortSignal;\n }) => {\n const query = lastMessageTimestamp ? { lastMessageTimestamp } : undefined;\n return await this.client.GET('/backend/widget/v2/poll/{sessionId}', {\n params: { path: { sessionId }, query },\n signal: abortSignal,\n });\n };\n\n getSessions = async ({\n cursor,\n filters,\n abortSignal,\n }: {\n cursor: string | undefined;\n filters: Record<string, string>;\n abortSignal?: AbortSignal;\n }) => {\n return await this.client.GET('/backend/widget/v2/sessions', {\n params: { query: { cursor, filters: JSON.stringify(filters) } },\n signal: abortSignal,\n });\n };\n\n /**\n * openapi-fetch usually works fine for file uploads, but this time around it parses the payload in a weird way and results in 413 errors (payload too large)\n * Anyway, good old XHR even does it better with progress events\n */\n uploadFile = async ({\n file,\n abortSignal,\n onProgress,\n }: {\n file: File;\n abortSignal: AbortSignal;\n onProgress?: (percentage: number) => void;\n }): Promise<Dto['UploadWidgetFileResponseDto']> => {\n return new Promise((resolve, reject) => {\n const formData = new FormData();\n formData.append('file', file);\n\n const xhr = new XMLHttpRequest();\n\n // Set up abort functionality\n if (abortSignal) {\n abortSignal.addEventListener('abort', () => {\n xhr.abort();\n reject(new DOMException('Aborted', 'AbortError'));\n });\n\n // If already aborted, reject immediately\n if (abortSignal.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n }\n\n xhr.upload.addEventListener('progress', (event) => {\n if (event.lengthComputable && onProgress) {\n const percentage = Math.round((event.loaded / event.total) * 100);\n onProgress(percentage);\n }\n });\n\n // Handle completion\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n const data = JSON.parse(xhr.responseText);\n resolve(data);\n } catch (error) {\n reject(new Error(`Failed to parse response: ${error}`));\n }\n } else {\n reject(new Error(`Upload failed with status: ${xhr.status}`));\n }\n });\n\n xhr.addEventListener('error', () => {\n reject(new Error('Network error occurred'));\n });\n\n xhr.addEventListener('timeout', () => {\n reject(new Error('Upload timed out'));\n });\n\n const { baseUrl } = this.constructClientOptions(this.userToken);\n\n const path = '/backend/widget/v2/upload' satisfies Endpoint;\n const uploadUrl = `${baseUrl}${path}`;\n xhr.open('POST', uploadUrl);\n\n xhr.setRequestHeader('X-Bot-Token', this.config.token);\n const userToken = this.userToken ?? this.config.user?.token;\n if (userToken) {\n xhr.setRequestHeader('Authorization', `Bearer ${this.userToken}`);\n } else {\n console.error('User token not set');\n }\n\n xhr.send(formData);\n });\n };\n\n vote = async (body: VoteInputDto) => {\n return await this.client.POST('/backend/widget/v2/chat/vote', { body });\n };\n\n resolveSession = async (\n body: ResolveSessionDto,\n abortSignal?: AbortSignal,\n ) => {\n return await this.client.POST('/backend/widget/v2/session/resolve', {\n body,\n signal: abortSignal,\n });\n };\n\n createStateCheckpoint = async (\n body: Dto['WidgetCreateStateCheckpointInputDto'],\n ) => {\n return await this.client.POST('/backend/widget/v2/checkpoint', {\n body,\n });\n };\n}\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","import isEqual from 'lodash.isequal';\n\nexport type Subscriber<T> = (data: T) => void;\n\nexport class PrimitiveState<S> {\n private subscribers = new Set<Subscriber<S>>();\n private state: S;\n private initialState: S;\n\n constructor(state: S) {\n this.state = state;\n this.initialState = state;\n }\n\n get = (): S => this.state;\n\n set = (newState: S): void => {\n if (!isEqual(this.state, newState)) {\n this.state = newState;\n this.notifySubscribers(newState);\n }\n };\n\n setPartial = (_s: Partial<S>): void => {\n if (_s === undefined || _s === null) return;\n const newState = { ...this.state, ..._s };\n this.set(newState);\n };\n\n reset = (): void => {\n this.set(this.initialState);\n };\n\n private notifySubscribers = (state: S) => {\n const subscribersArray = Array.from(this.subscribers);\n subscribersArray.forEach((callback) => {\n try {\n callback(state);\n } catch (error) {\n if (import.meta.env.MODE !== 'test') {\n console.error(error);\n }\n }\n });\n };\n\n subscribe = (callback: Subscriber<S>): (() => void) => {\n this.subscribers.add(callback);\n\n return () => {\n this.subscribers.delete(callback);\n };\n };\n}\n","import { PrimitiveState } from './PrimitiveState';\n\nexport type PollingState = {\n isPolling: boolean;\n isError: boolean;\n};\n\nexport class Poller {\n state = new PrimitiveState<PollingState>({\n isPolling: false,\n isError: false,\n });\n private abortController = new AbortController();\n\n reset = () => {\n this.abortController.abort('Resetting poller');\n this.stopPolling?.();\n this.stopPolling = null;\n };\n\n private stopPolling: (() => void) | null = null;\n\n startPolling = (\n cb: (abortSignal: AbortSignal) => Promise<void>,\n intervalMs: number,\n ) => {\n if (this.stopPolling) return;\n\n const timeouts: NodeJS.Timeout[] = [];\n\n const poll = async () => {\n this.abortController = new AbortController();\n this.state.setPartial({ isPolling: true });\n\n try {\n await cb(this.abortController.signal);\n } catch (error) {\n if (this.abortController.signal.aborted) {\n // If aborted, just return and do not schedule the nest poll\n return;\n }\n console.error('Failed to poll:', error);\n this.state.setPartial({ isError: true });\n } finally {\n this.state.setPartial({ isPolling: false });\n }\n\n // Another check to stop scheduling polls in case someone removes the early return in the catch above\n if (this.abortController.signal.aborted) {\n console.log('Poller aborted, not scheduling anymore');\n } else {\n timeouts.push(setTimeout(poll, intervalMs));\n }\n };\n\n poll();\n\n this.stopPolling = () => {\n timeouts.forEach(clearTimeout);\n this.state.reset();\n };\n };\n}\n","export type Result<T, E> =\n | { data: T; error?: undefined }\n | { data?: undefined; error: E };\n\n/**\n * Many thanks to @m-tabaza for this utility... Kotlin vibes\n */\nexport function runCatching<T, E = unknown>(\n callback: () => Promise<T>,\n): Promise<Result<T, E>>;\nexport function runCatching<T, E = unknown>(callback: () => T): Result<T, E>;\nexport function runCatching<T, E = unknown>(\n callback: () => T | Promise<T>,\n): Result<T, E> | Promise<Result<T, E>> {\n try {\n const result = callback();\n\n if (result instanceof Promise) {\n return result.then((data) => ({ data })).catch((error: E) => ({ error }));\n }\n\n return { data: result };\n } catch (error) {\n return { error: error as E };\n }\n}\n","import type { ApiCaller } from '../api/api-caller';\nimport type { MessageType } from '../types/messages';\nimport type { ActionCallDto, MessageDto } from '../types/dtos';\nimport type { WidgetConfig } from '../types/widget-config';\nimport { Poller } from '../utils/Poller';\nimport { runCatching } from '../utils/run-catching';\nimport type { MessageCtx } from './message.ctx';\nimport type { SessionCtx } from './session.ctx';\n\nexport class ActiveSessionPollingCtx {\n private api: ApiCaller;\n private config: WidgetConfig;\n private sessionCtx: SessionCtx;\n private messageCtx: MessageCtx;\n private sessionPollingIntervalSeconds: number;\n\n private poller = new Poller();\n\n constructor({\n api,\n config,\n sessionCtx,\n messageCtx,\n sessionPollingIntervalSeconds,\n }: {\n api: ApiCaller;\n config: WidgetConfig;\n sessionCtx: SessionCtx;\n messageCtx: MessageCtx;\n sessionPollingIntervalSeconds: number;\n }) {\n this.api = api;\n this.config = config;\n this.sessionCtx = sessionCtx;\n this.messageCtx = messageCtx;\n this.sessionPollingIntervalSeconds = sessionPollingIntervalSeconds;\n\n this.registerPolling();\n }\n\n private registerPolling = () => {\n this.sessionCtx.sessionState.subscribe(({ session }) => {\n if (session?.id) {\n this.poller.startPolling(async (abortSignal) => {\n this.hackAndSlash(session.id, abortSignal);\n }, this.sessionPollingIntervalSeconds * 1000);\n } else {\n this.poller.reset();\n }\n });\n };\n\n private hackAndSlash = async (\n sessionId: string,\n abortSignal: AbortSignal,\n ): Promise<void> => {\n /**\n * This is a bit of an implicit contract... there are two cases here\n * 1. If there are no messages in state, it means the user selected a previous session from the sessions screen and got routed to the chat,\n * in this case, we want to show a loading indicator until the initial fetch is done\n * 2. There is a single message in state, which is the optimistically rendered user message,\n * in this case, we don't want to show a loading indicator\n */\n if (this.messageCtx.state.get().messages.length === 0) {\n this.messageCtx.state.setPartial({ isInitialFetchLoading: true });\n }\n\n const messages = this.messageCtx.state.get().messages;\n const lastMessageTimestamp =\n messages.length > 0\n ? messages[messages.length - 1]?.timestamp\n : undefined;\n\n const { data } = await this.api.pollSessionAndHistory({\n sessionId,\n abortSignal,\n lastMessageTimestamp,\n });\n\n if (data?.session) {\n this.sessionCtx.sessionState.setPartial({ session: data.session });\n this.sessionCtx.setSessions([data.session]);\n }\n\n if (data?.history && data.history.length > 0) {\n // Get a fresh reference to current messages after the poll is done\n const prevMessages = this.messageCtx.state.get().messages;\n const newMessages = data.history\n .map(this.mapHistoryToMessage)\n .filter(\n (newMsg) =>\n !prevMessages.some((existingMsg) => existingMsg.id === newMsg.id),\n );\n this.messageCtx.state.setPartial({\n messages: [...prevMessages, ...newMessages],\n });\n }\n\n if (this.messageCtx.state.get().isInitialFetchLoading) {\n this.messageCtx.state.setPartial({ isInitialFetchLoading: false });\n }\n };\n\n mapHistoryToMessage = (history: MessageDto): MessageType => {\n const commonFields = {\n id: history.publicId,\n timestamp: history.sentAt || '',\n attachments: history.attachments || undefined,\n };\n\n if (history.sender.kind === 'user') {\n return {\n ...commonFields,\n type: 'FROM_USER',\n content: history.content.text || '',\n deliveredAt: history.sentAt || '',\n };\n }\n\n if (history.sender.kind === 'agent') {\n return {\n ...commonFields,\n type: 'FROM_AGENT',\n component: 'agent_message',\n data: {\n message: history.content.text || '',\n },\n agent: {\n name: history.sender.name || '',\n avatar: history.sender.avatar || '',\n id: null,\n isAi: false,\n },\n };\n }\n\n const action =\n history.actionCalls && history.actionCalls.length > 0\n ? history.actionCalls[history.actionCalls.length - 1]\n : undefined;\n\n return {\n ...commonFields,\n type: 'FROM_BOT',\n component: 'bot_message',\n agent: {\n id: null,\n name: this.config.bot?.name || '',\n isAi: true,\n avatar: this.config.bot?.avatar || '',\n },\n data: {\n message: history.content.text || '',\n action: action\n ? {\n name: action.actionName,\n data: this.extractActionResult(action),\n }\n : undefined,\n },\n };\n };\n\n extractActionResult = (action: ActionCallDto) => {\n const result = action.result;\n\n if (result === null) return result;\n if (typeof result !== 'object') return result;\n\n if (\n 'responseBodyText' in result &&\n typeof result.responseBodyText === 'string'\n ) {\n const responseBodyText = result.responseBodyText;\n const parsed = runCatching(() => JSON.parse(responseBodyText)).data;\n if (parsed) return parsed;\n }\n\n return action.result;\n };\n}\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import { PrimitiveState } from '../utils/PrimitiveState';\nimport { ApiCaller } from '../api/api-caller';\nimport { type WidgetConfig } from '../types/widget-config';\nimport { type Dto } from '../api/client';\nimport type { StorageCtx } from './storage.ctx';\nimport { v4 } from 'uuid';\n\ntype ContactState = {\n contact: {\n token: string;\n externalId: string | undefined;\n } | null;\n extraCollectedData: Record<string, string> | undefined;\n isCreatingUnverifiedContact: boolean;\n isErrorCreatingUnverifiedContact: boolean;\n};\n\nexport class ContactCtx {\n private config: WidgetConfig;\n private storageCtx?: StorageCtx;\n private api: ApiCaller;\n state: PrimitiveState<ContactState>;\n\n constructor({\n config,\n api,\n storageCtx,\n }: {\n api: ApiCaller;\n config: WidgetConfig;\n storageCtx?: StorageCtx;\n }) {\n this.config = config;\n this.storageCtx = storageCtx;\n this.api = api;\n\n this.state = new PrimitiveState<ContactState>({\n contact: config.user?.token\n ? {\n token: config.user.token,\n // Set optional externalId from config... not local storage\n externalId: config.user.externalId,\n }\n : null,\n extraCollectedData: undefined,\n isCreatingUnverifiedContact: false,\n isErrorCreatingUnverifiedContact: false,\n });\n\n this.autoCreateUnverifiedUserIfNotExists();\n }\n\n shouldCollectData = (): boolean => {\n if (!this.state.get().contact?.token && this.config.collectUserData) {\n return true;\n }\n return false;\n };\n\n private autoCreateUnverifiedUserIfNotExists = async () => {\n /**\n * If token is passed in config... we consider it as a verified user and do nothing (we don't force generate an externalId)\n * If a non-verified user take their token and place it in the config... the backend will refuse their requests saying that a non-verified token must have an externalId to create and get sessions\n */\n if (this.config.user?.token) return;\n\n /**\n * If collectUserData is true... we check if the user entered their credentials before, otherwise, show them the welcome screen so they can enter their credentials\n */\n if (this.config.collectUserData && !this.config.user?.data?.email) {\n /**\n * If extra data collection fields are passed,\n * we do not check for a persisted token.\n * This will force the contact to enter the extra data fields every time they visit the page.\n */\n if (this.config.extraDataCollectionFields?.length) {\n return;\n }\n\n const persistedToken = await this.storageCtx?.getContactToken();\n if (persistedToken) {\n await this.setUnverifiedContact(persistedToken);\n }\n // return early whether there is a persisted token or not\n return;\n }\n\n /**\n * If there is no email, then it is an anonymous contact, we check if the contact is persisted or we create a new one\n */\n if (!this.config.user?.data?.email) {\n const persistedToken = await this.storageCtx?.getContactToken();\n if (persistedToken) {\n await this.setUnverifiedContact(persistedToken);\n // return early only if there is a persisted token\n return;\n }\n }\n\n /**\n * If we reach here... then it is one of two\n * 1. There is an email passed in the config, let's just upsert the unverified contact without checking for persistence; maybe the email in the config did change.\n * 2. It is an anonymous contact (without an email) using this device for the first time.\n *\n * This is still safe even if the email in the config is tampered with by the contact, because there is a client-side externalId that will be generated for the current device...\n * So, only sessions created on this device will be accessible.\n */\n await this.createUnverifiedContact({\n email: this.config.user?.data?.email,\n non_verified_name: this.config.user?.data?.name || 'Anonymous',\n non_verified_custom_data: this.config.user?.data?.customData,\n });\n };\n\n createUnverifiedContact = async (\n payload: Dto['CreateUnverifiedContactDto'],\n extraCollectedData?: Record<string, string>,\n ): Promise<void> => {\n this.state.setPartial({ extraCollectedData });\n\n try {\n this.state.setPartial({\n isCreatingUnverifiedContact: true,\n isErrorCreatingUnverifiedContact: false,\n });\n\n const { data } = await this.api.createUnverifiedContact(payload);\n if (data?.token) {\n await this.setUnverifiedContact(data.token);\n } else {\n this.state.setPartial({ isErrorCreatingUnverifiedContact: true });\n }\n } finally {\n this.state.setPartial({ isCreatingUnverifiedContact: false });\n }\n };\n\n setUnverifiedContact = async (token: string) => {\n const persistedExternalId = await this.storageCtx?.getExternalContactId();\n /** Give priority to `externalId` from the config */\n const externalId: string =\n this.config.user?.externalId || persistedExternalId || v4();\n this.api.setAuthToken(token);\n // Set token in state after setting the token in the api handler\n await this.storageCtx?.setContactToken(token);\n await this.storageCtx?.setExternalContactId(externalId);\n this.state.setPartial({ contact: { token, externalId } });\n };\n}\n","import { v4 as uuidv4 } from 'uuid';\n\nexport function genUuid() {\n return uuidv4();\n}\n","import type { ApiCaller } from '../api/api-caller';\nimport type { Dto } from '../api/client';\nimport type { SessionDto } from '../types/dtos';\nimport { Poller } from '../utils/Poller';\nimport { PrimitiveState } from '../utils/PrimitiveState';\nimport type { ContactCtx } from './contact.ctx';\n\ntype SessionState = {\n /**\n * The currently selected session.\n * Can be null if no session is selected, or if in chat screen and the session is not created yet.\n */\n session: SessionDto | null;\n isCreatingSession: boolean;\n isResolvingSession: boolean;\n};\ntype SessionsState = {\n /** List of all user sessions */\n data: SessionDto[];\n /** A cursor to get the next page of sessions */\n cursor: string | undefined;\n /** Indicates if no more pages are left */\n isLastPage: boolean;\n /** Did fetch for the first time */\n didStartInitialFetch: boolean;\n isInitialFetchLoading: boolean;\n};\n\nexport class SessionCtx {\n private api: ApiCaller;\n private contactCtx: ContactCtx;\n private sessionsPollingIntervalSeconds: number;\n private sessionsRefresher = new Poller();\n\n public sessionState = new PrimitiveState<SessionState>({\n session: null,\n isCreatingSession: false,\n isResolvingSession: false,\n });\n public sessionsState = new PrimitiveState<SessionsState>({\n data: [],\n cursor: undefined,\n isLastPage: false,\n didStartInitialFetch: false,\n /**\n * Initialize this as `true` so it always starts loading until the first fetch is done\n */\n isInitialFetchLoading: true,\n });\n\n constructor({\n api,\n contactCtx,\n sessionsPollingIntervalSeconds,\n }: {\n api: ApiCaller;\n contactCtx: ContactCtx;\n sessionsPollingIntervalSeconds: number;\n }) {\n this.api = api;\n this.contactCtx = contactCtx;\n this.sessionsPollingIntervalSeconds = sessionsPollingIntervalSeconds;\n\n this.registerSessionsRefresherWrapper();\n }\n\n /** Clears the session and stops polling */\n reset = async () => {\n // Reset the session only, leave sessions as-is\n this.sessionState.reset();\n };\n\n private registerSessionsRefresherWrapper = () => {\n if (\n // If the widget config was initially provided with a contact token, no state change would be triggered, so we just fetch\n this.contactCtx.state.get().contact?.token &&\n !this.sessionsState.get().didStartInitialFetch\n ) {\n this.registerSessionsRefresher();\n } else {\n // In other cases where auto authenticate is fired, the token would be eventually set in state, so we wait for it\n this.contactCtx.state.subscribe(({ contact }) => {\n if (contact?.token && !this.sessionsState.get().didStartInitialFetch) {\n this.registerSessionsRefresher();\n }\n });\n }\n };\n\n private registerSessionsRefresher = () => {\n this.sessionsRefresher.startPolling(async () => {\n if (this.sessionsState.get().didStartInitialFetch === false) {\n this.sessionsState.setPartial({ didStartInitialFetch: true });\n }\n\n await this.refreshSessions();\n\n if (this.sessionsState.get().isInitialFetchLoading === true) {\n this.sessionsState.setPartial({ isInitialFetchLoading: false });\n }\n }, this.sessionsPollingIntervalSeconds * 1000);\n };\n\n createSession = async () => {\n this.sessionState.setPartial({ session: null, isCreatingSession: true });\n\n const externalId = this.contactCtx.state.get().contact?.externalId;\n const { data: session, error } = await this.api.createSession({\n customData: externalId\n ? {\n external_id: externalId,\n }\n : undefined,\n });\n if (session) {\n this.sessionState.setPartial({ session, isCreatingSession: false });\n return session;\n }\n\n this.sessionState.setPartial({ isCreatingSession: false });\n console.error('Failed to create session:', error);\n return null;\n };\n\n loadMoreSessions = async () => {\n if (this.sessionsState.get().isLastPage) return;\n\n const { data } = await this.getSessions({\n cursor: this.sessionsState.get().cursor,\n });\n\n if (data) {\n const allSessions = [...this.sessionsState.get().data, ...data.items];\n // TODO sort by updated at\n const deduped = allSessions.filter(\n (s, i, self) => i === self.findIndex((_s) => s.id === _s.id),\n );\n\n this.sessionsState.setPartial({\n data: deduped,\n cursor: data.next || undefined,\n isLastPage: data.next === null,\n });\n }\n };\n\n private getSessions = async ({ cursor }: { cursor: string | undefined }) => {\n if (!this.contactCtx.state.get().contact?.token) return { data: null };\n\n const externalId = this.contactCtx.state.get().contact?.externalId;\n return await this.api.getSessions({\n cursor,\n filters: externalId\n ? {\n external_id: externalId,\n }\n : {},\n });\n };\n\n setSessions = (data: SessionDto[]) => {\n const sessions = [...data, ...this.sessionsState.get().data].filter(\n (s, i, self) => i === self.findIndex((_s) => s.id === _s.id),\n );\n this.sessionsState.setPartial({ data: sessions });\n };\n\n refreshSessions = async () => {\n // Get the first page only (pass no `cursor`)\n const { data } = await this.getSessions({ cursor: undefined });\n if (!data) return;\n this.setSessions(data.items);\n };\n\n resolveSession = async () => {\n const currentSession = this.sessionState.get().session;\n if (!currentSession || !currentSession.isOpened) {\n return { success: false, error: 'Session is not opened' } as const;\n }\n\n this.sessionState.setPartial({ isResolvingSession: true });\n\n const { data: session, error } = await this.api.resolveSession({\n session_id: currentSession.id,\n });\n\n if (session) {\n this.sessionState.setPartial({ session, isResolvingSession: false });\n return { success: true, data: session } as const;\n }\n\n this.sessionState.setPartial({ isResolvingSession: false });\n return { success: false, error } as const;\n };\n\n createStateCheckpoint = async (\n payload: Dto['WidgetCreateStateCheckpointInputDto']['payload'],\n ) => {\n const session_id = this.sessionState.get().session?.id;\n if (!session_id) return;\n\n const { data, error } = await this.api.createStateCheckpoint({\n session_id,\n payload,\n });\n\n if (data) return { data } as const;\n\n return { success: false, error } as const;\n };\n}\n","import { ApiCaller } from '../api/api-caller';\nimport type { WidgetConfig } from '../types/widget-config';\nimport type {\n BotMessageType,\n MessageType,\n UserMessageType,\n} from '../types/messages';\nimport type {\n MessageAttachmentType,\n SendMessageDto,\n SendMessageOutputDto,\n} from '../types/dtos';\nimport { PrimitiveState } from '../utils/PrimitiveState';\nimport { genUuid } from '../utils/uuid';\nimport { SessionCtx } from './session.ctx';\nimport type { ContactCtx } from './contact.ctx';\n\ntype MessageCtxState = {\n messages: MessageType[];\n isSendingMessage: boolean;\n lastAIResMightSolveUserIssue: boolean;\n isInitialFetchLoading: boolean;\n};\n\nexport class MessageCtx {\n private config: WidgetConfig;\n private api: ApiCaller;\n private contactCtx: ContactCtx;\n private sessionCtx: SessionCtx;\n\n public state = new PrimitiveState<MessageCtxState>({\n messages: [],\n isSendingMessage: false,\n lastAIResMightSolveUserIssue: false,\n isInitialFetchLoading: false,\n });\n\n private sendMessageAbortController = new AbortController();\n\n constructor({\n config,\n api,\n sessionCtx,\n contactCtx,\n }: {\n config: WidgetConfig;\n api: ApiCaller;\n sessionCtx: SessionCtx;\n contactCtx: ContactCtx;\n }) {\n this.config = config;\n this.api = api;\n this.sessionCtx = sessionCtx;\n this.contactCtx = contactCtx;\n }\n\n reset = () => {\n this.sendMessageAbortController.abort('Resetting chat');\n this.state.reset();\n };\n\n sendMessage = async (input: {\n content: SendMessageDto['content'];\n attachments?: SendMessageDto['attachments'];\n customData?: SendMessageDto['custom_data'];\n exitModePrompt?: string;\n }): Promise<void> => {\n /* ------------------------------------------------------ */\n /* Prevent sending if there is no content */\n /* ------------------------------------------------------ */\n if (\n !input.content.trim() &&\n (!input.attachments || input.attachments.length === 0)\n ) {\n console.warn('Cannot send an empty message of no content or attachments');\n return;\n }\n /* ------------------------------------------------------ */\n /* Prevent sending while waiting for AI res */\n /* ------------------------------------------------------ */\n const isSending = this.state.get().isSendingMessage;\n const isAssignedToAI =\n this.sessionCtx.sessionState.get().session?.assignee.kind === 'ai';\n const _messages = this.state.get().messages;\n const lastMessage =\n _messages.length > 0 ? _messages[_messages.length - 1] : undefined;\n if (\n (isAssignedToAI && isSending) ||\n // If last message is from user, then bot response did not arrive yet\n (isAssignedToAI && lastMessage?.type === 'FROM_USER')\n ) {\n console.warn('Cannot send messages while awaiting AI response');\n return;\n }\n\n this.sendMessageAbortController = new AbortController();\n\n /* ------------------------------------------------------ */\n /* Clear last AI response might solve user issue */\n /* ------------------------------------------------------ */\n this.state.setPartial({ lastAIResMightSolveUserIssue: false });\n\n try {\n this.state.setPartial({ isSendingMessage: true });\n /* ------------------------------------------------------ */\n /* Optimistically add message to rendered messages */\n /* ------------------------------------------------------ */\n const userMessage = this.toUserMessage(\n input.content.trim(),\n input.attachments || undefined,\n );\n const currentMessages = this.state.get().messages;\n this.state.setPartial({\n messages: [...currentMessages, userMessage],\n });\n\n /* ------------------------------------------------------ */\n /* Create session if not exists */\n /* ------------------------------------------------------ */\n if (!this.sessionCtx.sessionState.get().session?.id) {\n const createdSession = await this.sessionCtx.createSession();\n\n // TODO: apply some retry logic here\n if (!createdSession) {\n console.error('Failed to create session');\n return;\n }\n\n // Refresh sessions list instantly to get the newly created session in the sessions list\n void this.sessionCtx.refreshSessions();\n }\n const sessionId = this.sessionCtx.sessionState.get().session?.id;\n if (!sessionId) return;\n /* ------------------------------------------------------ */\n /* Send and wait for bot response */\n /* ------------------------------------------------------ */\n const { data } = await this.api.sendMessage(\n {\n uuid: userMessage.id,\n bot_token: this.config.token,\n headers: this.config.headers,\n query_params: this.config.queryParams,\n body_properties: this.config.bodyProperties,\n session_id: sessionId,\n content: userMessage.content,\n attachments: input.attachments,\n clientContext: this.config.context,\n custom_data: {\n ...(this.config.messageCustomData || {}),\n ...(input.customData || {}),\n },\n language: this.config.language,\n exit_mode_prompt: input.exitModePrompt,\n },\n this.sendMessageAbortController.signal,\n );\n\n if (data?.success) {\n /* ------------------------------------------------------ */\n /* Append bot reply if not fetched from polling */\n /* ------------------------------------------------------ */\n const botMessage = this.toBotMessage(data);\n if (botMessage) {\n const prevMessages = this.state.get().messages;\n const shouldAppend = !prevMessages.some(\n (m) => m.id === botMessage.id,\n );\n if (!shouldAppend) {\n this.state.setPartial({\n lastAIResMightSolveUserIssue:\n data.autopilotResponse?.mightSolveUserIssue ||\n data.uiResponse?.mightSolveUserIssue,\n });\n return;\n }\n this.state.setPartial({\n messages: [...prevMessages, botMessage],\n lastAIResMightSolveUserIssue:\n data.autopilotResponse?.mightSolveUserIssue ||\n data.uiResponse?.mightSolveUserIssue,\n });\n }\n if (data.session) {\n this.sessionCtx.sessionState.setPartial({ session: data.session });\n }\n } else {\n const errorMessage = this.toBotErrorMessage(\n data?.error?.message || 'Unknown error occurred',\n );\n const currentMessages = this.state.get().messages;\n this.state.setPartial({\n messages: [...currentMessages, errorMessage],\n });\n }\n } catch (error) {\n if (!this.sendMessageAbortController.signal.aborted) {\n console.error('Failed to send message:', error);\n }\n } finally {\n this.state.setPartial({ isSendingMessage: false });\n }\n };\n\n private toUserMessage = (\n content: string,\n attachments?: MessageAttachmentType[],\n ): UserMessageType => {\n const messageContent = (() => {\n const extraCollectedData = this.contactCtx.state.get().extraCollectedData;\n // Prepend extra collected data if this is the first message in the session\n if (\n this.state.get().messages.length === 0 &&\n extraCollectedData &&\n Object.keys(extraCollectedData).length > 0\n ) {\n const data = Object.entries(extraCollectedData)\n .filter(([_, value]) => !!value)\n .map(([key, value]) => `${key}: ${value}`)\n .join(' \\n');\n return `${data} \\n\\n${content}`;\n }\n\n return content;\n })();\n\n return {\n id: genUuid(),\n type: 'FROM_USER',\n content: messageContent,\n deliveredAt: new Date().toISOString(),\n attachments,\n timestamp: new Date().toISOString(),\n };\n };\n\n private toBotMessage = (\n response: SendMessageOutputDto,\n ): BotMessageType | null => {\n if (response.success && response.autopilotResponse) {\n return {\n type: 'FROM_BOT',\n id: response.autopilotResponse.id || genUuid(),\n timestamp: new Date().toISOString(),\n component: 'bot_message',\n agent: this.config.bot\n ? {\n name: this.config.bot.name || '',\n isAi: true,\n avatar: this.config.bot.avatar || '',\n id: null,\n }\n : undefined,\n data: {\n message: response.autopilotResponse.value.content,\n action: response.uiResponse?.value.name\n ? {\n name: response.uiResponse.value.name,\n data: response.uiResponse.value.request_response,\n }\n : undefined,\n },\n };\n }\n\n return null;\n };\n\n private toBotErrorMessage = (message: string): BotMessageType => {\n return {\n type: 'FROM_BOT',\n id: genUuid(),\n timestamp: new Date().toISOString(),\n component: 'TEXT',\n data: {\n message,\n variant: 'error',\n action: undefined,\n },\n };\n };\n}\n","import type { WidgetConfig } from '../types/widget-config';\nimport { PrimitiveState } from '../utils/PrimitiveState';\nimport type { ContactCtx } from './contact.ctx';\nimport type { SessionCtx } from './session.ctx';\nimport type { WidgetCtx } from './widget.ctx';\n\nexport type ScreenU =\n | /** A welcome screen to collect user data. Useful in public non-logged-in environments */\n 'welcome'\n /** Show a list of the user's previous sessions */\n | 'sessions'\n /** Self-explanatory */\n | 'chat';\n\ntype RouterState = {\n screen: ScreenU;\n};\n\nexport class RouterCtx {\n state: PrimitiveState<RouterState>;\n\n private config: WidgetConfig;\n private contactCtx: ContactCtx;\n private sessionCtx: SessionCtx;\n private resetChat: WidgetCtx['resetChat'];\n\n constructor({\n config,\n contactCtx,\n sessionCtx,\n resetChat,\n }: {\n config: WidgetConfig;\n contactCtx: ContactCtx;\n sessionCtx: SessionCtx;\n resetChat: WidgetCtx['resetChat'];\n }) {\n this.config = config;\n this.contactCtx = contactCtx;\n this.sessionCtx = sessionCtx;\n this.resetChat = resetChat;\n this.state = new PrimitiveState<RouterState>({\n screen: this.contactCtx.shouldCollectData()\n ? 'welcome'\n : this.config.router?.chatScreenOnly\n ? 'chat'\n : 'sessions',\n });\n\n this.registerRoutingListener();\n }\n\n private registerRoutingListener = () => {\n this.contactCtx.state.subscribe(({ contact }) => {\n // Auto navigate to sessions screen after collecting user data\n if (contact?.token && this.state.get().screen === 'welcome') {\n this.state.setPartial({\n screen: this.config.router?.chatScreenOnly ? 'chat' : 'sessions',\n });\n }\n });\n\n this.sessionCtx.sessionsState.subscribe(\n ({ isInitialFetchLoading, data }) => {\n if (\n this.config.router?.chatScreenOnly &&\n // Do not route to a chat if we are currently inside one already\n // This also applies to newly created sessions; the new session will be in `sessionState` before it is refreshed and included in `sessionsState`\n !this.sessionCtx.sessionState.get().session?.id\n ) {\n const mostRecentOpenSessionId = data.find((s) => s.isOpened)?.id;\n return mostRecentOpenSessionId\n ? this.toChatScreen(mostRecentOpenSessionId)\n : undefined;\n }\n\n if (data.length) return;\n if (this.config.router?.goToChatIfNoSessions === false) return;\n\n // Auto navigate to chat screen if contact has no previous sessions\n if (!isInitialFetchLoading && this.state.get().screen !== 'chat') {\n this.toChatScreen();\n }\n },\n );\n };\n\n toSessionsScreen = () => {\n this.resetChat();\n this.state.setPartial({ screen: 'sessions' });\n };\n\n /**\n * @param sessionId The ID of the session to open, or `undefined` if it is a new chat session\n */\n toChatScreen = (sessionId?: string) => {\n this.resetChat();\n\n if (sessionId) {\n const session = this.sessionCtx.sessionsState\n .get()\n .data.find((s) => s.id === sessionId);\n // Do not navigate if session is not found (this shouldn't happen, unless a wrong ID is passed)\n if (!session) return;\n this.sessionCtx.sessionState.setPartial({ session });\n }\n\n this.state.setPartial({ screen: 'chat' });\n };\n}\n","import type { ExternalStorage } from '../types/external-storage';\n\nexport class StorageCtx {\n private storage: ExternalStorage;\n private KEYS = {\n contactToken: 'opencx__widget__contactToken',\n externalContactId: 'opencx__widget__externalContactId',\n };\n\n constructor({ storage }: { storage: ExternalStorage }) {\n this.storage = storage;\n }\n\n setContactToken = async (token: string) => {\n await this.storage.set(this.KEYS.contactToken, token);\n };\n getContactToken = async () => {\n return this.storage.get(this.KEYS.contactToken);\n };\n\n setExternalContactId = async (id: string) => {\n await this.storage.set(this.KEYS.externalContactId, id);\n };\n getExternalContactId = async () => {\n return this.storage.get(this.KEYS.externalContactId);\n };\n}\n","import { ApiCaller } from '../api/api-caller';\nimport type { ModeDto } from '../types/dtos';\nimport type { ExternalStorage } from '../types/external-storage';\nimport type { WidgetConfig } from '../types/widget-config';\nimport { ActiveSessionPollingCtx } from './active-session-polling.ctx';\nimport { ContactCtx } from './contact.ctx';\nimport { MessageCtx } from './message.ctx';\nimport { RouterCtx } from './router.ctx';\nimport { SessionCtx } from './session.ctx';\nimport { StorageCtx } from './storage.ctx';\n\nexport class WidgetCtx {\n public config: WidgetConfig;\n public api: ApiCaller;\n\n public contactCtx: ContactCtx;\n public sessionCtx: SessionCtx;\n public messageCtx: MessageCtx;\n public routerCtx: RouterCtx;\n public storageCtx?: StorageCtx;\n public modes: ModeDto[] = [];\n\n private static pollingIntervalsSeconds: {\n session: number;\n sessions: number;\n } | null = null;\n private activeSessionPollingCtx: ActiveSessionPollingCtx;\n\n private constructor({\n config,\n storage,\n modes,\n }: {\n config: WidgetConfig;\n storage?: ExternalStorage;\n modes: ModeDto[];\n }) {\n if (!WidgetCtx.pollingIntervalsSeconds) {\n throw Error(\n 'Widget polling values are not defined, did you call WidgetCtx.initialize()',\n );\n }\n\n this.config = config;\n this.api = new ApiCaller({ config });\n this.storageCtx = storage ? new StorageCtx({ storage }) : undefined;\n this.modes = modes;\n\n this.contactCtx = new ContactCtx({\n api: this.api,\n config: this.config,\n storageCtx: this.storageCtx,\n });\n\n this.sessionCtx = new SessionCtx({\n api: this.api,\n contactCtx: this.contactCtx,\n sessionsPollingIntervalSeconds:\n WidgetCtx.pollingIntervalsSeconds.sessions,\n });\n\n this.messageCtx = new MessageCtx({\n config: this.config,\n api: this.api,\n sessionCtx: this.sessionCtx,\n contactCtx: this.contactCtx,\n });\n\n this.activeSessionPollingCtx = new ActiveSessionPollingCtx({\n api: this.api,\n config: this.config,\n sessionCtx: this.sessionCtx,\n messageCtx: this.messageCtx,\n sessionPollingIntervalSeconds: WidgetCtx.pollingIntervalsSeconds.session,\n });\n\n this.routerCtx = new RouterCtx({\n config: this.config,\n contactCtx: this.contactCtx,\n sessionCtx: this.sessionCtx,\n resetChat: this.resetChat,\n });\n }\n\n static initialize = async ({\n config,\n storage,\n }: {\n config: WidgetConfig;\n storage?: ExternalStorage;\n }) => {\n const externalConfig = await new ApiCaller({\n config,\n }).getExternalWidgetConfig();\n\n this.pollingIntervalsSeconds = {\n session: externalConfig.data?.sessionPollingIntervalSeconds || 10,\n sessions: externalConfig.data?.sessionsPollingIntervalSeconds || 60,\n };\n\n return new WidgetCtx({\n config,\n storage,\n modes: externalConfig.data?.modes || [],\n });\n };\n\n resetChat = () => {\n this.sessionCtx.reset();\n this.messageCtx.reset();\n };\n}\n"],"names":["PATH_PARAM_RE","supportsRequestInitExt","_b","_a","randomID","createClient","clientOptions","baseUrl","CustomRequest","baseFetch","globalQuerySerializer","globalBodySerializer","baseHeaders","requestInitExt","baseOptions","removeTrailingSlash","middlewares","coreFetch","schemaPath","fetchOptions","localBaseUrl","fetch","Request","headers","params","parseAs","requestQuerySerializer","bodySerializer","defaultBodySerializer","body","init","querySerializer","createQuerySerializer","serializedBody","defaultHeaders","requestInit","mergeHeaders","id","options","request","createFinalURL","key","m","result","response","error","errorAfterMiddleware","i","method","url","middleware","serializePrimitiveParam","name","value","serializeObjectParam","values","joiner","k","final","finalName","serializeArrayParam","v","queryParams","search","defaultPathSerializer","pathname","pathParams","nextURL","match","explode","style","finalURL","allHeaders","finalHeaders","h","iterator","v2","defaultOnError","onErrorOptions","basicClient","client","ApiCaller","config","token","abortSignal","sessionId","lastMessageTimestamp","query","cursor","filters","file","onProgress","resolve","reject","formData","xhr","event","percentage","data","uploadUrl","LARGE_ARRAY_SIZE","HASH_UNDEFINED","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","MAX_SAFE_INTEGER","argsTag","arrayTag","asyncTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","promiseTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reRegExpChar","reIsHostCtor","reIsUint","typedArrayTags","freeGlobal","global","freeSelf","root","freeExports","exports","freeModule","module","moduleExports","freeProcess","nodeUtil","nodeIsTypedArray","arrayFilter","array","predicate","index","length","resIndex","arrayPush","offset","arraySome","baseTimes","n","iteratee","baseUnary","func","cacheHas","cache","getValue","object","mapToArray","map","overArg","transform","arg","setToArray","set","arrayProto","funcProto","objectProto","coreJsData","funcToString","hasOwnProperty","maskSrcKey","uid","nativeObjectToString","reIsNative","Buffer","Symbol","Uint8Array","propertyIsEnumerable","splice","symToStringTag","nativeGetSymbols","nativeIsBuffer","nativeKeys","DataView","getNative","Map","Promise","Set","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","Hash","entries","entry","hashClear","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","lastIndex","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","size","SetCache","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArr","isArray","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","isIndex","eq","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","getRawTag","objectToString","baseIsArguments","isObjectLike","baseIsEqual","other","bitmask","customizer","stack","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","getTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsNative","isObject","isMasked","pattern","isFunction","baseIsTypedArray","isLength","baseKeys","isPrototype","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","othIndex","tag","convert","objProps","getAllKeys","objLength","othProps","skipCtor","objValue","objCtor","othCtor","keys","getSymbols","isKeyable","isOwn","unmasked","symbol","stubArray","Ctor","ctorString","type","proto","isArrayLike","stubFalse","isEqual","PrimitiveState","state","newState","_s","callback","Poller","cb","intervalMs","timeouts","poll","runCatching","ActiveSessionPollingCtx","api","sessionCtx","messageCtx","sessionPollingIntervalSeconds","session","messages","prevMessages","newMessages","newMsg","existingMsg","history","commonFields","action","responseBodyText","parsed","byteToHex","unsafeStringify","arr","getRandomValues","rnds8","rng","randomUUID","native","v4","buf","rnds","ContactCtx","storageCtx","_c","_d","persistedToken","_e","_g","_f","_h","_j","_i","_l","_k","_n","_m","payload","extraCollectedData","persistedExternalId","externalId","genUuid","uuidv4","SessionCtx","contactCtx","sessionsPollingIntervalSeconds","contact","deduped","s","self","sessions","currentSession","session_id","MessageCtx","input","isSending","isAssignedToAI","_messages","lastMessage","userMessage","currentMessages","botMessage","errorMessage","content","attachments","messageContent","_","message","RouterCtx","resetChat","isInitialFetchLoading","mostRecentOpenSessionId","StorageCtx","storage","_WidgetCtx","modes","externalConfig","WidgetCtx"],"mappings":"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","x_google_ignoreList":[0,3,8,9,10,11]}
|