@nexvio-ai/widget-js 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/debug.ts","../src/utils/EventEmitter.ts","../src/utils/serializeError.ts","../src/messenger/BaseMessenger.ts","../src/messenger/WidgetFrameMessenger.ts","../src/utils/base64.ts","../src/utils/stripFunctions.ts","../src/utils/zod-to-json-schema.ts","../src/NexvioWidgetElement.ts","../src/NexvioChatbotElement.ts"],"sourcesContent":["export function debugEnabled(): boolean {\n try {\n return typeof window !== \"undefined\" && (window as any).__NEXVIO_WIDGET_DEBUG === true\n } catch {\n return false\n }\n}\n\nexport function log(...args: unknown[]): void {\n if (debugEnabled()) console.log(...args)\n}\n\nexport function warn(...args: unknown[]): void {\n if (debugEnabled()) console.warn(...args)\n}\n\nexport function debug(...args: unknown[]): void {\n if (debugEnabled()) console.debug(...args)\n}\n","type Listener<T> = (payload: T) => void\n\nexport class EventEmitter<TEvents extends Record<string, unknown> = Record<string, unknown>> {\n #listeners = new Map<keyof TEvents, Set<Listener<any>>>()\n\n on<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): void {\n if (!this.#listeners.has(event)) {\n this.#listeners.set(event, new Set())\n }\n this.#listeners.get(event)?.add(listener as Listener<any>)\n }\n\n once<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): void {\n const onceListener: Listener<TEvents[K]> = (payload) => {\n this.off(event, onceListener as Listener<TEvents[K]>)\n listener(payload)\n }\n this.on(event, onceListener)\n }\n\n emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void {\n this.#listeners.get(event)?.forEach((listener) => listener(payload))\n }\n\n off<K extends keyof TEvents>(event: K, listener?: Listener<TEvents[K]>): void {\n if (!listener) {\n this.#listeners.delete(event)\n return\n }\n this.#listeners.get(event)?.delete(listener as Listener<any>)\n }\n\n clear(): void {\n this.#listeners.clear()\n }\n}\n","export interface SerializedError {\n name: string\n message: string\n stack?: string\n metadata?: Record<string, unknown>\n}\n\nexport function serializeError(error: unknown): SerializedError {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n }\n }\n\n if (typeof error === \"object\" && error !== null) {\n const obj = error as Record<string, unknown>\n return {\n name: typeof obj.name === \"string\" ? obj.name : \"Error\",\n message: typeof obj.message === \"string\" ? obj.message : \"Unknown error\",\n stack: typeof obj.stack === \"string\" ? obj.stack : undefined,\n metadata: Object.fromEntries(Object.entries(obj).filter(([key]) => ![\"name\", \"message\", \"stack\"].includes(key))),\n }\n }\n\n return {\n name: \"Error\",\n message: String(error),\n }\n}\n\nexport function deserializeError(serialized: SerializedError): Error {\n const error = new Error(serialized.message)\n error.name = serialized.name\n if (serialized.stack) {\n error.stack = serialized.stack\n }\n return error\n}\n","import { debug, log, warn } from \"../utils/debug\"\nimport { EventEmitter } from \"../utils/EventEmitter\"\nimport { deserializeError, serializeError } from \"../utils/serializeError\"\n\ntype AnyFunction = (...args: any[]) => any // eslint-disable-line @typescript-eslint/no-explicit-any\n\ntype WidgetMessage =\n | {\n type: \"command\"\n nonce: string\n command: string\n payload?: unknown\n }\n | {\n type: \"response\"\n nonce: string\n payload?: unknown\n error?: ReturnType<typeof serializeError>\n }\n | {\n type: \"event\"\n event: string\n payload?: unknown\n }\n | {\n type: \"fetch\"\n nonce: string\n url: string\n init?: RequestInit\n }\n | {\n type: \"abort\"\n nonce: string\n reason?: unknown\n }\n\nconst MESSAGE_TOKEN = \"__nexvioWidget\"\n\nconst DEFAULT_COMMAND_CAPABILITY = () => true\n\nexport interface BaseMessengerConfig<\n TOutgoing extends Record<string, AnyFunction>,\n TIncoming extends Record<string, AnyFunction>,\n> {\n target: () => Window | null\n targetOrigin: string\n handlers: {\n [K in keyof TIncoming as K extends string ? `on${Capitalize<K>}` : never]: (\n payload: Parameters<TIncoming[K]>[0],\n ) => ReturnType<TIncoming[K]> | Promise<ReturnType<TIncoming[K]>>\n }\n fetch?: typeof fetch\n canReceiveCommand?: (command: keyof TOutgoing & string) => boolean\n}\n\nexport class BaseMessenger<\n TOutgoing extends Record<string, AnyFunction>,\n TIncoming extends Record<string, AnyFunction>,\n> {\n #target: () => Window | null\n #targetOrigin: string\n #handlers: BaseMessengerConfig<TOutgoing, TIncoming>[\"handlers\"]\n #fetch: typeof fetch\n #events = new EventEmitter<Record<string, unknown>>()\n #canReceiveCommand: (command: string) => boolean\n\n #pending = new Map<string, { resolve: (value: unknown) => void; reject: (reason: unknown) => void; stack: string }>()\n\n #abortControllers = new Map<string, AbortController>()\n\n constructor(config: BaseMessengerConfig<TOutgoing, TIncoming>) {\n this.#target = config.target\n this.#targetOrigin = config.targetOrigin\n this.#handlers = config.handlers\n this.#fetch = config.fetch ?? fetch.bind(globalThis)\n this.#canReceiveCommand = config.canReceiveCommand ?? DEFAULT_COMMAND_CAPABILITY\n }\n\n connect(): void {\n log(\"[NexvioWidget][Messenger] connect\", { targetOrigin: this.#targetOrigin })\n window.addEventListener(\"message\", this.#handleMessage)\n }\n\n disconnect(): void {\n log(\"[NexvioWidget][Messenger] disconnect\")\n window.removeEventListener(\"message\", this.#handleMessage)\n this.#events.clear()\n this.#pending.clear()\n this.#abortControllers.forEach((controller) => controller.abort())\n this.#abortControllers.clear()\n }\n\n on(event: string, listener: (payload: unknown) => void): void {\n this.#events.on(event, listener)\n }\n\n off(event: string, listener: (payload: unknown) => void): void {\n this.#events.off(event, listener)\n }\n\n readonly commands: {\n [K in keyof TOutgoing]: (...args: Parameters<TOutgoing[K]>) => Promise<Awaited<ReturnType<TOutgoing[K]>>>\n } = new Proxy(\n {},\n {\n get: (_, command: string) => {\n return (payload: unknown, transfer?: Transferable[]) => {\n return this.#sendCommand(command, payload, transfer) as Promise<unknown>\n }\n },\n },\n ) as never\n\n #sendMessage(message: WidgetMessage, transfer?: Transferable[]) {\n const target = this.#target()\n if (!target) {\n throw new Error(\"Widget frame not ready\")\n }\n const payload = { ...message, [MESSAGE_TOKEN]: true }\n\n try {\n debug(\"[NexvioWidget][Messenger] postMessage\", {\n type: message.type,\n command: (message as any).command,\n targetOrigin: this.#targetOrigin,\n })\n target.postMessage(payload, this.#targetOrigin, transfer)\n } catch (error) {\n const shouldRetryWithAnyOrigin =\n this.#targetOrigin !== \"*\" &&\n error instanceof DOMException &&\n (error.name === \"SecurityError\" || /target origin provided/i.test(error.message))\n\n if (shouldRetryWithAnyOrigin) {\n warn('[NexvioWidget][Messenger] SecurityError posting to targetOrigin. Retrying with \"*\"')\n target.postMessage(payload, \"*\", transfer)\n return\n }\n\n throw error\n }\n }\n\n async #sendCommand(command: string, payload: unknown, transfer?: Transferable[]) {\n const nonce = crypto.randomUUID()\n return new Promise((resolve, reject) => {\n this.#pending.set(nonce, { resolve, reject, stack: new Error().stack ?? \"\" })\n try {\n this.#sendMessage({ type: \"command\", command, payload, nonce }, transfer)\n } catch (error) {\n this.#pending.delete(nonce)\n reject(error)\n }\n })\n }\n\n #handleMessage = async (event: MessageEvent) => {\n debug(\"[NexvioWidget][Messenger] window.message\", {\n origin: event.origin,\n hasToken: !!(event.data && typeof event.data === \"object\" && (event.data as any)[MESSAGE_TOKEN] === true),\n })\n if (!this.#isWidgetMessage(event)) {\n return\n }\n\n const data = event.data as WidgetMessage & { [MESSAGE_TOKEN]: true }\n switch (data.type) {\n case \"event\": {\n log(\"[NexvioWidget][Messenger] <- event\", { event: data.event, payload: data.payload })\n this.#events.emit(data.event, data.payload)\n break\n }\n case \"response\": {\n const handler = this.#pending.get(data.nonce)\n if (!handler) {\n warn(\"[NexvioWidget][Messenger] missing pending handler for response\", data.nonce)\n return\n }\n this.#pending.delete(data.nonce)\n if (data.error) {\n handler.reject(deserializeError(data.error))\n } else {\n handler.resolve(data.payload)\n }\n break\n }\n case \"command\": {\n if (!this.#canReceiveCommand(data.command)) {\n this.#sendMessage({\n type: \"response\",\n nonce: data.nonce,\n error: serializeError(new Error(`Command \"${data.command}\" is not supported by the host`)),\n })\n return\n }\n\n const commandCapitalized = `on${data.command.charAt(0).toUpperCase()}${data.command.slice(1)}`\n const handler = (this.#handlers as Record<string, AnyFunction>)[commandCapitalized]\n if (!handler) {\n this.#sendMessage({\n type: \"response\",\n nonce: data.nonce,\n error: serializeError(new Error(`Command handler \"${data.command}\" not implemented by host`)),\n })\n return\n }\n\n try {\n log(\"[NexvioWidget][Messenger] <- command\", { command: data.command, payload: data.payload })\n const result = await handler(data.payload)\n this.#sendMessage({ type: \"response\", nonce: data.nonce, payload: result })\n } catch (error) {\n this.#sendMessage({\n type: \"response\",\n nonce: data.nonce,\n error: serializeError(error),\n })\n }\n break\n }\n case \"fetch\": {\n log(\"[NexvioWidget][Messenger] <- fetch\", { url: data.url })\n const controller = new AbortController()\n this.#abortControllers.set(data.nonce, controller)\n try {\n const response = await this.#fetch(data.url, {\n ...data.init,\n signal: controller.signal,\n })\n const contentType = response.headers.get(\"content-type\") ?? \"\"\n let payload: unknown\n if (contentType.includes(\"application/json\")) {\n payload = await response.json()\n } else {\n payload = await response.text()\n }\n this.#sendMessage({\n type: \"response\",\n nonce: data.nonce,\n payload: {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n body: payload,\n },\n })\n } catch (error) {\n this.#sendMessage({\n type: \"response\",\n nonce: data.nonce,\n error: serializeError(error),\n })\n } finally {\n this.#abortControllers.delete(data.nonce)\n }\n break\n }\n case \"abort\": {\n const controller = this.#abortControllers.get(data.nonce)\n controller?.abort(data.reason)\n this.#abortControllers.delete(data.nonce)\n break\n }\n default:\n break\n }\n }\n\n #isWidgetMessage(event: MessageEvent): boolean {\n // Basic shape/token check first\n if (!event.data || typeof event.data !== \"object\" || (event.data as any)[MESSAGE_TOKEN] !== true) {\n return false\n }\n\n // Verify the message came from our iframe window if available\n const targetWin = this.#target()\n if (targetWin && event.source && event.source !== targetWin) {\n debug(\"[NexvioWidget][Messenger] drop message: source mismatch\")\n return false\n }\n\n // If origin doesn't match what we expected, accept the first valid message\n // from the iframe window and learn its actual origin to avoid drops in dev.\n if (event.origin !== this.#targetOrigin) {\n // Update targetOrigin to the actual sender origin when we can attribute the source.\n if (targetWin && event.source === targetWin) {\n warn(\"[NexvioWidget][Messenger] learning targetOrigin from first message\", {\n from: this.#targetOrigin,\n to: event.origin,\n })\n this.#targetOrigin = event.origin\n } else {\n debug(\"[NexvioWidget][Messenger] drop message: origin mismatch\", {\n expected: this.#targetOrigin,\n got: event.origin,\n })\n return false\n }\n }\n\n return true\n }\n}\n","import type { FrameToHostCommands, HostToFrameCommands } from \"../types\"\nimport { BaseMessenger } from \"./BaseMessenger\"\n\nexport class WidgetFrameMessenger extends BaseMessenger<HostToFrameCommands, FrameToHostCommands> {\n constructor(config: {\n target: () => Window | null\n targetOrigin: string\n handlers: {\n onEmitEvent: FrameToHostCommands[\"emitEvent\"]\n onRequestClientAction: FrameToHostCommands[\"requestClientAction\"]\n onExecuteClientTool: FrameToHostCommands[\"executeClientTool\"]\n }\n fetch?: typeof fetch\n }) {\n super({\n target: config.target,\n targetOrigin: config.targetOrigin,\n handlers: config.handlers,\n fetch: config.fetch,\n canReceiveCommand: () => true,\n })\n }\n}\n","function toBase64(input: string): string {\n if (typeof globalThis.btoa === \"function\") {\n return globalThis.btoa(input)\n }\n const buffer = (\n globalThis as { Buffer?: { from(data: string, encoding: string): { toString(encoding: string): string } } }\n ).Buffer\n if (buffer) {\n return buffer.from(input, \"binary\").toString(\"base64\")\n }\n throw new Error(\"No base64 encoder available in this environment\")\n}\n\nfunction fromBase64(input: string): string {\n if (typeof globalThis.atob === \"function\") {\n return globalThis.atob(input)\n }\n const buffer = (\n globalThis as { Buffer?: { from(data: string, encoding: string): { toString(encoding: string): string } } }\n ).Buffer\n if (buffer) {\n return buffer.from(input, \"base64\").toString(\"binary\")\n }\n throw new Error(\"No base64 decoder available in this environment\")\n}\n\nexport function encodeBase64(value: unknown): string {\n if (value === undefined) {\n throw new TypeError(\"encodeBase64: `undefined` cannot be serialized. Pass null instead.\")\n }\n const json = JSON.stringify(value)\n const bytes = new TextEncoder().encode(json)\n let binary = \"\"\n for (const byte of bytes) {\n binary += String.fromCharCode(byte)\n }\n return toBase64(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\")\n}\n\nexport function decodeBase64<T = unknown>(encoded: string): T {\n const normalized = encoded.replace(/-/g, \"+\").replace(/_/g, \"/\")\n const binary = fromBase64(normalized)\n const bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0))\n const json = new TextDecoder().decode(bytes)\n return JSON.parse(json) as T\n}\n","export function stripFunctions<T>(input: T, cloneMap: WeakMap<object, object> = new WeakMap()): T {\n if (typeof input !== \"object\" || input === null) {\n return input\n }\n\n if (cloneMap.has(input as object)) {\n return cloneMap.get(input as object) as T\n }\n\n if (Array.isArray(input)) {\n const arrClone: unknown[] = []\n cloneMap.set(input as object, arrClone)\n for (const item of input) {\n arrClone.push(stripFunctions(item, cloneMap))\n }\n return arrClone as unknown as T\n }\n\n const clone: Record<string, unknown> = {}\n cloneMap.set(input as object, clone)\n for (const [key, value] of Object.entries(input as Record<string, unknown>)) {\n if (typeof value === \"function\") {\n continue\n }\n clone[key] = stripFunctions(value, cloneMap)\n }\n return clone as T\n}\n","/**\n * Converts a Zod schema to OpenAI-compatible JSON Schema format.\n * This is a simplified converter that handles common Zod types.\n */\nexport function zodToJsonSchema(schema: any): any {\n if (!schema || !schema._def) {\n return { type: \"object\", properties: {}, additionalProperties: false }\n }\n\n const def = schema._def\n const typeName = def.typeName\n\n // Handle ZodObject\n if (typeName === \"ZodObject\") {\n const shape = def.shape()\n const properties: Record<string, any> = {}\n const required: string[] = []\n\n for (const key in shape) {\n const fieldSchema = shape[key]\n properties[key] = zodToJsonSchema(fieldSchema)\n\n // Check if field is required (not optional)\n if (fieldSchema._def.typeName !== \"ZodOptional\") {\n required.push(key)\n }\n }\n\n return {\n type: \"object\",\n properties,\n required: required.length > 0 ? required : undefined,\n additionalProperties: false,\n }\n }\n\n // Handle ZodString\n if (typeName === \"ZodString\") {\n const result: any = { type: \"string\" }\n if (def.description) {\n result.description = def.description\n }\n return result\n }\n\n // Handle ZodNumber\n if (typeName === \"ZodNumber\") {\n const result: any = { type: \"number\" }\n if (def.description) {\n result.description = def.description\n }\n return result\n }\n\n // Handle ZodBoolean\n if (typeName === \"ZodBoolean\") {\n const result: any = { type: \"boolean\" }\n if (def.description) {\n result.description = def.description\n }\n return result\n }\n\n // Handle ZodArray\n if (typeName === \"ZodArray\") {\n const result: any = {\n type: \"array\",\n items: zodToJsonSchema(def.type),\n }\n if (def.description) {\n result.description = def.description\n }\n return result\n }\n\n // Handle ZodEnum\n if (typeName === \"ZodEnum\") {\n const result: any = {\n type: \"string\",\n enum: def.values,\n }\n if (def.description) {\n result.description = def.description\n }\n return result\n }\n\n // Handle ZodOptional\n if (typeName === \"ZodOptional\") {\n return zodToJsonSchema(def.innerType)\n }\n\n // Handle ZodNullable\n if (typeName === \"ZodNullable\") {\n const innerSchema = zodToJsonSchema(def.innerType)\n return {\n ...innerSchema,\n nullable: true,\n }\n }\n\n // Handle ZodLiteral\n if (typeName === \"ZodLiteral\") {\n return {\n type: typeof def.value,\n enum: [def.value],\n }\n }\n\n if (typeName === \"ZodUnion\") {\n const options = def.options\n if (options && options.length > 0) {\n return {\n anyOf: options.map((opt: any) => zodToJsonSchema(opt)),\n }\n }\n }\n\n // Default fallback\n return { type: \"object\", additionalProperties: true }\n}\n","import { WidgetFrameMessenger } from \"./messenger/WidgetFrameMessenger\"\nimport type {\n FrameToHostCommands,\n FrameToHostEvents,\n NexvioWidgetEvent,\n NexvioWidgetOptions,\n SanitizedWidgetOptions,\n} from \"./types\"\nimport { encodeBase64 } from \"./utils/base64\"\nimport { debug, log } from \"./utils/debug\"\nimport { stripFunctions } from \"./utils/stripFunctions\"\nimport { zodToJsonSchema } from \"./utils/zod-to-json-schema\"\n\nconst DEFAULT_WIDGET_URL = \"https://chatwidget.app\"\nconst WIDGET_VERSION = \"0.1.0\"\n\nconst styleContent = `\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n }\n .nx-wrapper {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n transition: opacity 160ms ease-in-out;\n }\n :host([data-loaded='true']) .nx-wrapper {\n opacity: 1;\n }\n .nx-frame {\n border: none;\n width: 100%;\n height: 100%;\n position: absolute;\n inset: 0;\n background: transparent;\n }\n`\n\nconst BaseHTMLElement: typeof HTMLElement =\n typeof HTMLElement === \"undefined\" ? (class {} as typeof HTMLElement) : HTMLElement\n\nexport class NexvioWidgetElement extends BaseHTMLElement {\n #shadowRootRef: ShadowRoot | null = null\n #frame?: HTMLIFrameElement\n #wrapper?: HTMLDivElement\n #options?: NexvioWidgetOptions\n #sanitized?: SanitizedWidgetOptions\n #messenger?: WidgetFrameMessenger\n #loadedResolve?: () => void\n #loaded: Promise<void>\n #targetOrigin?: string\n #initialized = false\n #frameReady = false\n #pendingOptions?: SanitizedWidgetOptions\n\n constructor() {\n super()\n if (typeof window !== \"undefined\" && typeof this.attachShadow === \"function\") {\n this.#shadowRootRef = this.attachShadow({ mode: \"open\" })\n }\n log(\"[NexvioWidget] element: constructed\")\n this.#loaded = new Promise((resolve) => {\n this.#loadedResolve = resolve\n })\n }\n\n connectedCallback(): void {\n log(\"[NexvioWidget] element: connectedCallback\")\n this.#ensureStructure()\n if (this.#sanitized && !this.#initialized) {\n this.#initializeFrame()\n }\n }\n\n disconnectedCallback(): void {\n log(\"[NexvioWidget] element: disconnectedCallback\")\n this.#messenger?.disconnect()\n }\n\n setOptions(options: NexvioWidgetOptions): void {\n log(\"[NexvioWidget] setOptions: received\", options)\n const sanitized = this.#sanitizeOptions(options)\n const previous = this.#sanitized\n const baseUrl = sanitized.host?.baseUrl ?? DEFAULT_WIDGET_URL\n debug(\"[NexvioWidget] setOptions: sanitized\", sanitized)\n this.#ensureMessenger(new URL(baseUrl).origin, options.fetch)\n this.#options = options\n this.#sanitized = sanitized\n this.#pendingOptions = sanitized\n\n const requiresReload =\n !this.#initialized ||\n !previous ||\n previous.publicKey !== sanitized.publicKey ||\n (previous.host?.baseUrl ?? DEFAULT_WIDGET_URL) !== (sanitized.host?.baseUrl ?? DEFAULT_WIDGET_URL) ||\n // Reload if clientTools changed (added, removed, or modified)\n JSON.stringify(previous.clientTools) !== JSON.stringify(sanitized.clientTools)\n\n debug(\"[NexvioWidget] setOptions: requiresReload\", {\n requiresReload,\n reasons: {\n notInitialized: !this.#initialized,\n noPrevious: !previous,\n publicKeyChanged: previous && previous.publicKey !== sanitized.publicKey,\n baseUrlChanged:\n previous &&\n (previous.host?.baseUrl ?? DEFAULT_WIDGET_URL) !== (sanitized.host?.baseUrl ?? DEFAULT_WIDGET_URL),\n clientToolsChanged: previous && JSON.stringify(previous.clientTools) !== JSON.stringify(sanitized.clientTools),\n },\n })\n this.#updateDataAttributes(sanitized)\n\n if (requiresReload) {\n this.#initializeFrame(true)\n return\n }\n\n this.#flushOptionsIfReady()\n }\n\n async focusInput(): Promise<void> {\n await this.#loaded\n await this.#messenger?.commands.focusInput()\n }\n\n async refresh(): Promise<void> {\n await this.#loaded\n await this.#messenger?.commands.refresh()\n }\n\n async setVisitor(visitor: Record<string, unknown>): Promise<void> {\n await this.#loaded\n await this.#messenger?.commands.updateVisitor(visitor as any)\n }\n\n async reload(): Promise<void> {\n if (!this.#sanitized) return\n this.#initialized = false\n this.#initializeFrame(true)\n }\n\n get options(): NexvioWidgetOptions | undefined {\n return this.#options\n }\n\n #sanitizeOptions(options: NexvioWidgetOptions): SanitizedWidgetOptions {\n if (!options || typeof options.publicKey !== \"string\" || options.publicKey.trim().length === 0) {\n throw new Error(\"Nexvio widget requires a non-empty `publicKey`.\")\n }\n\n const hostBase = options.host?.baseUrl ?? DEFAULT_WIDGET_URL\n let validatedHost: URL\n try {\n validatedHost = new URL(hostBase)\n } catch (error) {\n throw new Error(`Invalid host baseUrl provided to Nexvio widget: ${error}`)\n }\n\n const sanitized: SanitizedWidgetOptions = stripFunctions({\n publicKey: options.publicKey.trim(),\n appearance: options.appearance,\n messageActions: options.messageActions,\n metadata: options.metadata,\n context: options.context,\n startScreen: options.startScreen,\n host: {\n baseUrl: validatedHost.toString().replace(/\\/$/, \"\"),\n query: options.host?.query,\n },\n })\n\n // Convert client tools to sanitized format (without execute functions)\n if (options.client?.tools && Array.isArray(options.client.tools)) {\n log(\"[NexvioWidget] sanitizeOptions: converting client tools\", options.client.tools)\n sanitized.clientTools = options.client.tools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n parameters: zodToJsonSchema(tool.parameters),\n }))\n log(\"[NexvioWidget] sanitizeOptions: sanitized clientTools\", sanitized.clientTools)\n } else {\n log(\"[NexvioWidget] sanitizeOptions: no client tools found\", {\n hasClient: !!options.client,\n hasTools: !!options.client?.tools,\n })\n }\n\n return sanitized\n }\n\n #ensureStructure(): void {\n if (this.#wrapper) return\n\n if (!this.#shadowRootRef) return\n\n const style = document.createElement(\"style\")\n style.textContent = styleContent\n\n const wrapper = document.createElement(\"div\")\n wrapper.className = \"nx-wrapper\"\n\n const frame = document.createElement(\"iframe\")\n frame.className = \"nx-frame\"\n frame.setAttribute(\"allow\", \"clipboard-read; clipboard-write\")\n frame.setAttribute(\"referrerpolicy\", \"strict-origin-when-cross-origin\")\n frame.name = \"nexvio-widget\"\n frame.tabIndex = -1\n\n wrapper.appendChild(frame)\n this.#shadowRootRef.append(style, wrapper)\n\n this.#frame = frame\n this.#wrapper = wrapper\n }\n\n #initializeFrame(forceReload = false): void {\n if (!this.#frame || !this.#sanitized) return\n if (this.#initialized && !forceReload) return\n\n this.#initialized = true\n this.#frameReady = false\n this.dataset.loaded = \"false\"\n this.#loaded = new Promise((resolve) => {\n this.#loadedResolve = resolve\n })\n\n const frameUrl = this.#buildFrameUrl(this.#sanitized)\n // Do not disconnect/connect here; it clears event listeners on the messenger.\n\n debug(\"[NexvioWidget] initializeFrame\", { forceReload, frameUrl: frameUrl.toString() })\n this.#frame.addEventListener(\"load\", this.#handleFrameLoad, { once: true })\n this.#frame.src = frameUrl.toString()\n this.#updateDataAttributes(this.#sanitized)\n }\n\n #handleFrameLoad = () => {\n debug(\"[NexvioWidget] frame load event\")\n this.dataset.loaded = \"true\"\n this.#loadedResolve?.()\n this.#flushOptionsIfReady()\n }\n\n #ensureMessenger(origin: string, customFetch?: typeof fetch): void {\n if (this.#messenger && this.#targetOrigin === origin) {\n debug(\"[NexvioWidget] messenger: reuse\", { origin })\n return\n }\n\n this.#messenger?.disconnect()\n this.#targetOrigin = origin\n\n log(\"[NexvioWidget] messenger: create\", { origin })\n this.#messenger = new WidgetFrameMessenger({\n target: () => this.#frame?.contentWindow ?? null,\n targetOrigin: origin,\n fetch: customFetch,\n handlers: {\n onEmitEvent: (payload) => this.#handleFrameEvent(payload),\n onRequestClientAction: (payload) => this.#handleClientAction(payload),\n onExecuteClientTool: (payload) => this.#handleExecuteClientTool(payload),\n },\n })\n\n // Ensure we are listening for messages as early as possible.\n this.#messenger.connect()\n\n this.#messenger.on(\"widget.ready\", (payload) => this.#dispatchReady(payload as FrameToHostEvents[\"widget.ready\"]))\n this.#messenger.on(\"widget.error\", (payload) => this.#dispatchError(payload as FrameToHostEvents[\"widget.error\"]))\n this.#messenger.on(\"widget.event\", (payload) => this.#dispatchEvent(payload as FrameToHostEvents[\"widget.event\"]))\n this.#messenger.on(\"widget.resize\", (payload) => this.#handleResize(payload as FrameToHostEvents[\"widget.resize\"]))\n }\n\n #buildFrameUrl(options: SanitizedWidgetOptions): URL {\n const base = options.host?.baseUrl ?? DEFAULT_WIDGET_URL\n const trimmedBase = base.endsWith(\"/\") ? base.slice(0, -1) : base\n const url = new URL(`${trimmedBase}/${encodeURIComponent(options.publicKey)}`)\n url.searchParams.set(\"embed\", \"1\")\n const query = options.host?.query ?? {}\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined) continue\n url.searchParams.set(key, String(value))\n }\n\n const payload = stripFunctions({\n appearance: options.appearance,\n metadata: options.metadata,\n context: options.context,\n startScreen: options.startScreen,\n version: WIDGET_VERSION,\n clientTools: options.clientTools,\n })\n\n log(\"[NexvioWidget] buildFrameUrl: payload with clientTools\", payload)\n\n if (Object.values(payload).some((value) => value !== undefined)) {\n url.hash = encodeBase64(payload)\n }\n\n debug(\"[NexvioWidget] buildFrameUrl\", { url: url.toString() })\n return url\n }\n\n #updateDataAttributes(options: SanitizedWidgetOptions): void {\n const colorScheme = typeof options.appearance?.colorScheme === \"string\" ? options.appearance.colorScheme : undefined\n if (colorScheme) {\n this.dataset.colorScheme = colorScheme\n } else {\n delete this.dataset.colorScheme\n }\n }\n\n #handleFrameEvent({ name, detail }: Parameters<FrameToHostCommands[\"emitEvent\"]>[0]): void {\n log(\"[NexvioWidget] event\", { name, detail })\n const event: NexvioWidgetEvent = { name, detail }\n this.#options?.onEvent?.(event)\n this.dispatchEvent(\n new CustomEvent(\"nexvio.event\", {\n detail: event,\n bubbles: true,\n composed: true,\n }),\n )\n this.dispatchEvent(\n new CustomEvent(`nexvio.${name}`, {\n detail,\n bubbles: true,\n composed: true,\n }),\n )\n }\n\n async #handleClientAction({\n action,\n data,\n }: Parameters<FrameToHostCommands[\"requestClientAction\"]>[0]): Promise<unknown> {\n const handler = this.#options?.clientActions?.[action]\n if (!handler) {\n throw new Error(`No client action handler registered for \"${action}\"`)\n }\n return handler(data)\n }\n\n async #handleExecuteClientTool({\n toolName,\n toolArgs,\n }: Parameters<FrameToHostCommands[\"executeClientTool\"]>[0]): Promise<any> {\n log(\"[NexvioWidget] executeClientTool\", { toolName, toolArgs })\n\n const tool = this.#options?.client?.tools?.find((t) => t.name === toolName)\n if (!tool) {\n throw new Error(`No client tool registered with name \"${toolName}\"`)\n }\n\n try {\n // Validate parameters against Zod schema\n const validated = tool.parameters.parse(toolArgs)\n\n // Execute the tool\n const result = await Promise.resolve(tool.execute(validated))\n\n log(\"[NexvioWidget] executeClientTool: success\", { toolName, result })\n return result\n } catch (error: any) {\n console.error(\"[NexvioWidget] executeClientTool: error\", { toolName, error })\n throw new Error(`Tool execution failed for \"${toolName}\": ${error.message}`)\n }\n }\n\n #dispatchReady(payload: FrameToHostEvents[\"widget.ready\"]): void {\n log(\"[NexvioWidget] ready\", payload)\n this.#frameReady = true\n this.#flushOptionsIfReady()\n this.dispatchEvent(\n new CustomEvent(\"nexvio.ready\", {\n detail: payload,\n bubbles: true,\n composed: true,\n }),\n )\n }\n\n #dispatchError(payload: FrameToHostEvents[\"widget.error\"]): void {\n const error = new Error(payload.message)\n if (payload.stack) {\n error.stack = payload.stack\n }\n log(\"[NexvioWidget] error\", payload)\n this.dispatchEvent(\n new CustomEvent(\"nexvio.error\", {\n detail: { error },\n bubbles: true,\n composed: true,\n }),\n )\n }\n\n #dispatchEvent(payload: FrameToHostEvents[\"widget.event\"]): void {\n this.#handleFrameEvent(payload)\n }\n\n #handleResize(payload: FrameToHostEvents[\"widget.resize\"]): void {\n if (typeof payload?.height === \"number\") {\n this.style.setProperty(\"--nexvio-widget-height\", `${payload.height}px`)\n }\n }\n\n #flushOptionsIfReady(): void {\n if (!this.#frameReady) return\n if (!this.#pendingOptions) return\n const options = this.#pendingOptions\n this.#pendingOptions = undefined\n if (!this.#messenger) return\n debug(\"[NexvioWidget] flushOptionsIfReady: syncing options to frame\")\n void this.#messenger.commands.setOptions(options).catch((error) => {\n console.error(\"Failed to sync widget options:\", error)\n })\n }\n}\n\nexport function registerNexvioWidget(tagName = \"nexvio-chat-widget\"): void {\n if (typeof customElements === \"undefined\") return\n if (!customElements.get(tagName)) {\n customElements.define(tagName, NexvioWidgetElement)\n }\n}\n","import { type NexvioWidgetElement, registerNexvioWidget } from \"./NexvioWidgetElement\"\nimport type { NexvioWidgetEvent, NexvioWidgetOptions } from \"./types\"\nimport { debug, log } from \"./utils/debug\"\n\nconst styleContent = `\n :host {\n --chatbot-button-size: 60px;\n --chatbot-button-bg: #3B82F6;\n --chatbot-button-color: white;\n --chatbot-widget-width: 420px;\n --chatbot-widget-height: 600px;\n --chatbot-widget-gap: 20px;\n \n position: fixed;\n bottom: var(--chatbot-widget-gap);\n right: var(--chatbot-widget-gap);\n z-index: 999999;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n }\n\n .nx-chatbot-button {\n width: var(--chatbot-button-size);\n height: var(--chatbot-button-size);\n border-radius: 50%;\n background: var(--chatbot-button-bg);\n color: var(--chatbot-button-color);\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n position: relative;\n overflow: hidden;\n }\n\n .nx-chatbot-button:hover {\n transform: scale(1.05);\n box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);\n }\n\n .nx-chatbot-button:active {\n transform: scale(0.95);\n }\n\n .nx-chatbot-button svg {\n width: 28px;\n height: 28px;\n transition: transform 0.3s ease, opacity 0.3s ease;\n }\n\n .nx-chatbot-button.open svg.icon-chat {\n transform: rotate(90deg) scale(0);\n opacity: 0;\n }\n\n .nx-chatbot-button svg.icon-close {\n position: absolute;\n transform: rotate(-90deg) scale(0);\n opacity: 0;\n }\n\n .nx-chatbot-button.open svg.icon-close {\n transform: rotate(0deg) scale(1);\n opacity: 1;\n }\n\n .nx-chatbot-widget-container {\n position: absolute;\n bottom: calc(var(--chatbot-button-size) + 16px);\n right: 0;\n width: var(--chatbot-widget-width);\n height: var(--chatbot-widget-height);\n max-height: calc(100vh - var(--chatbot-button-size) - var(--chatbot-widget-gap) - 32px);\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);\n overflow: hidden;\n transform-origin: bottom right;\n transform: scale(0.8);\n opacity: 0;\n pointer-events: none;\n transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), \n opacity 0.3s ease;\n }\n\n .nx-chatbot-widget-container.open {\n transform: scale(1);\n opacity: 1;\n pointer-events: auto;\n }\n\n .nx-chatbot-widget-container nexvio-chat-widget {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .nx-chatbot-badge {\n position: absolute;\n top: -4px;\n right: -4px;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: #EF4444;\n color: white;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n transform: scale(0);\n transition: transform 0.2s ease;\n }\n\n .nx-chatbot-badge.visible {\n transform: scale(1);\n }\n\n @media (max-width: 768px) {\n :host {\n bottom: 16px;\n right: 16px;\n --chatbot-widget-gap: 16px;\n }\n\n .nx-chatbot-widget-container {\n position: fixed;\n bottom: 0;\n right: 0;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n border-radius: 0;\n }\n\n .nx-chatbot-widget-container.open {\n transform: scale(1);\n }\n }\n`\n\nconst BaseHTMLElement: typeof HTMLElement =\n typeof HTMLElement === \"undefined\" ? (class {} as typeof HTMLElement) : HTMLElement\n\nexport interface NexvioChatbotOptions extends NexvioWidgetOptions {\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n defaultOpen?: boolean\n buttonColor?: string\n badge?: number | boolean\n buttonIcon?: string\n gap?: number\n}\n\nexport class NexvioChatbotElement extends BaseHTMLElement {\n #shadowRootRef: ShadowRoot | null = null\n #button?: HTMLButtonElement\n #widgetContainer?: HTMLDivElement\n #widget?: NexvioWidgetElement\n #badge?: HTMLSpanElement\n #isOpen = false\n #options?: NexvioChatbotOptions\n #initialized = false\n\n constructor() {\n super()\n if (typeof window !== \"undefined\" && typeof this.attachShadow === \"function\") {\n this.#shadowRootRef = this.attachShadow({ mode: \"open\" })\n }\n log(\"[NexvioChatbot] element: constructed\")\n }\n\n connectedCallback(): void {\n log(\"[NexvioChatbot] element: connectedCallback\")\n this.#ensureStructure()\n if (this.#options && !this.#initialized) {\n this.#initialize()\n }\n }\n\n disconnectedCallback(): void {\n log(\"[NexvioChatbot] element: disconnectedCallback\")\n }\n\n setOptions(options: NexvioChatbotOptions): void {\n log(\"[NexvioChatbot] setOptions:\", options)\n this.#options = options\n this.#ensureStructure()\n\n if (!this.#initialized) {\n this.#initialize()\n } else {\n this.#updateWidget()\n }\n\n this.#updateStyles()\n this.#updateBadge()\n }\n\n open(): void {\n if (this.#isOpen) return\n this.#isOpen = true\n this.#button?.classList.add(\"open\")\n this.#widgetContainer?.classList.add(\"open\")\n this.dispatchEvent(new CustomEvent(\"chatbot.opened\", { bubbles: true, composed: true }))\n }\n\n close(): void {\n if (!this.#isOpen) return\n this.#isOpen = false\n this.#button?.classList.remove(\"open\")\n this.#widgetContainer?.classList.remove(\"open\")\n this.dispatchEvent(new CustomEvent(\"chatbot.closed\", { bubbles: true, composed: true }))\n }\n\n toggle(): void {\n if (this.#isOpen) {\n this.close()\n } else {\n this.open()\n }\n }\n\n get isOpen(): boolean {\n return this.#isOpen\n }\n\n get widget(): NexvioWidgetElement | undefined {\n return this.#widget\n }\n\n get options(): NexvioChatbotOptions | undefined {\n return this.#options\n }\n\n #ensureStructure(): void {\n if (this.#button && this.#widgetContainer) return\n if (!this.#shadowRootRef) return\n\n if (typeof window !== \"undefined\" && typeof customElements !== \"undefined\") {\n registerNexvioWidget()\n }\n\n const style = document.createElement(\"style\")\n style.textContent = styleContent\n\n const button = document.createElement(\"button\")\n button.className = \"nx-chatbot-button\"\n button.setAttribute(\"aria-label\", \"Open chat\")\n button.innerHTML = `\n <svg class=\"icon-chat\" xmlns=\"http://www.w3.org/2000/svg\" \n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" \n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M6 4h12a3 3 0 0 1 3 3v7a3 3 0 0 1-3 3H9l-4 3v-3H6a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3z\"/>\n </svg>\n <svg class=\"icon-close\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\"></path>\n </svg>\n `\n\n const badge = document.createElement(\"span\")\n badge.className = \"nx-chatbot-badge\"\n button.appendChild(badge)\n\n const widgetContainer = document.createElement(\"div\")\n widgetContainer.className = \"nx-chatbot-widget-container\"\n\n const widget = document.createElement(\"nexvio-chat-widget\") as NexvioWidgetElement\n\n widgetContainer.appendChild(widget)\n this.#shadowRootRef.append(style, button, widgetContainer)\n\n this.#button = button\n this.#widgetContainer = widgetContainer\n this.#widget = widget\n this.#badge = badge\n\n button.addEventListener(\"click\", () => this.toggle())\n\n widget.addEventListener(\"nexvio.event\", ((event: CustomEvent<NexvioWidgetEvent>) => {\n this.dispatchEvent(\n new CustomEvent(\"nexvio.event\", {\n detail: event.detail,\n bubbles: true,\n composed: true,\n }),\n )\n }) as EventListener)\n }\n\n #initialize(): void {\n if (this.#initialized || !this.#options || !this.#widget) return\n\n this.#initialized = true\n\n const widgetOptions: NexvioWidgetOptions = { ...this.#options }\n delete (widgetOptions as any).position\n delete (widgetOptions as any).defaultOpen\n delete (widgetOptions as any).buttonColor\n delete (widgetOptions as any).badge\n delete (widgetOptions as any).buttonIcon\n delete (widgetOptions as any).gap\n\n const setWidgetOptions = () => {\n if (this.#widget && typeof (this.#widget as any).setOptions === \"function\") {\n this.#widget.setOptions(widgetOptions)\n if (this.#options?.defaultOpen) {\n setTimeout(() => this.open(), 100)\n }\n debug(\"[NexvioChatbot] initialized\")\n } else if (typeof window !== \"undefined\" && typeof customElements !== \"undefined\") {\n customElements\n .whenDefined(\"nexvio-chat-widget\")\n .then(() => {\n if (this.#widget && typeof (this.#widget as any).setOptions === \"function\") {\n this.#widget.setOptions(widgetOptions)\n if (this.#options?.defaultOpen) {\n setTimeout(() => this.open(), 100)\n }\n debug(\"[NexvioChatbot] initialized\")\n }\n })\n .catch(() => {\n console.error(\"[NexvioChatbot] Failed to initialize widget element\")\n })\n }\n }\n\n setWidgetOptions()\n }\n\n #updateWidget(): void {\n if (!this.#widget || !this.#options) return\n\n const widgetOptions: NexvioWidgetOptions = { ...this.#options }\n delete (widgetOptions as any).position\n delete (widgetOptions as any).defaultOpen\n delete (widgetOptions as any).buttonColor\n delete (widgetOptions as any).badge\n delete (widgetOptions as any).buttonIcon\n delete (widgetOptions as any).gap\n\n if (typeof (this.#widget as any).setOptions === \"function\") {\n this.#widget.setOptions(widgetOptions)\n } else if (typeof window !== \"undefined\" && typeof customElements !== \"undefined\") {\n customElements\n .whenDefined(\"nexvio-chat-widget\")\n .then(() => {\n if (this.#widget && typeof (this.#widget as any).setOptions === \"function\") {\n this.#widget.setOptions(widgetOptions)\n }\n })\n .catch(() => {\n console.error(\"[NexvioChatbot] Failed to update widget element\")\n })\n }\n }\n\n #updateStyles(): void {\n if (!this.#options) return\n\n const host = this.#shadowRootRef?.host as HTMLElement\n if (!host) return\n\n if (this.#options.buttonColor) {\n host.style.setProperty(\"--chatbot-button-bg\", this.#options.buttonColor)\n }\n\n if (this.#options.gap !== undefined) {\n host.style.setProperty(\"--chatbot-widget-gap\", `${this.#options.gap}px`)\n }\n\n if (this.#options.position) {\n const positions = {\n \"bottom-right\": {\n bottom: \"var(--chatbot-widget-gap)\",\n right: \"var(--chatbot-widget-gap)\",\n top: \"auto\",\n left: \"auto\",\n },\n \"bottom-left\": {\n bottom: \"var(--chatbot-widget-gap)\",\n left: \"var(--chatbot-widget-gap)\",\n top: \"auto\",\n right: \"auto\",\n },\n \"top-right\": {\n top: \"var(--chatbot-widget-gap)\",\n right: \"var(--chatbot-widget-gap)\",\n bottom: \"auto\",\n left: \"auto\",\n },\n \"top-left\": {\n top: \"var(--chatbot-widget-gap)\",\n left: \"var(--chatbot-widget-gap)\",\n bottom: \"auto\",\n right: \"auto\",\n },\n }\n const pos = positions[this.#options.position]\n Object.entries(pos).forEach(([key, value]) => {\n host.style.setProperty(key, value)\n })\n }\n\n if (this.#options.buttonIcon && this.#button) {\n const chatIcon = this.#button.querySelector(\".icon-chat\")\n if (chatIcon) {\n chatIcon.innerHTML = this.#options.buttonIcon\n }\n }\n }\n\n #updateBadge(): void {\n if (!this.#badge || !this.#options) return\n\n const badgeValue = this.#options.badge\n if (typeof badgeValue === \"number\" && badgeValue > 0) {\n this.#badge.textContent = badgeValue > 99 ? \"99+\" : String(badgeValue)\n this.#badge.classList.add(\"visible\")\n } else if (badgeValue === true) {\n this.#badge.textContent = \"\"\n this.#badge.classList.add(\"visible\")\n } else {\n this.#badge.classList.remove(\"visible\")\n }\n }\n}\n\nexport function registerNexvioChatbot(tagName = \"nexvio-chat-bot\"): void {\n if (typeof customElements === \"undefined\") return\n if (!customElements.get(tagName)) {\n customElements.define(tagName, NexvioChatbotElement)\n }\n}\n"],"mappings":"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","names":["_targetOrigin","styleContent","BaseHTMLElement","_shadowRootRef","_options","_initialized","ensureStructure_fn"]}