@pagelines/sdk 1.0.217 → 1.0.219

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.
Files changed (68) hide show
  1. package/dist/{AgentProvider.vue_vue_type_script_setup_true_lang-J2dPA8gh.js → AgentProvider.vue_vue_type_script_setup_true_lang-CsNF0TwT.js} +2 -2
  2. package/dist/AgentProvider.vue_vue_type_script_setup_true_lang-CsNF0TwT.js.map +1 -0
  3. package/dist/AgentWidgetInline-DG-ZuBMI.js +33 -0
  4. package/dist/AgentWidgetInline-DG-ZuBMI.js.map +1 -0
  5. package/dist/AgentWidgetModal-D-7lR3Yy.js +65 -0
  6. package/dist/AgentWidgetModal-D-7lR3Yy.js.map +1 -0
  7. package/dist/AgentWidgetPopup-C7vent2i.js +119 -0
  8. package/dist/AgentWidgetPopup-C7vent2i.js.map +1 -0
  9. package/dist/{AgentWrap.vue_vue_type_script_setup_true_lang-Cc3E_MFR.js → AgentWrap.vue_vue_type_script_setup_true_lang-TeMIjtid.js} +2102 -2664
  10. package/dist/AgentWrap.vue_vue_type_script_setup_true_lang-TeMIjtid.js.map +1 -0
  11. package/dist/agent/AgentController.d.ts +12 -43
  12. package/dist/agent/index.d.ts +1 -4
  13. package/dist/agent/schema.d.ts +2 -15
  14. package/dist/agent/ui/AgentChat.vue.d.ts +2 -2
  15. package/dist/agent/ui/AgentModal.vue.d.ts +2 -2
  16. package/dist/agent/ui/AgentProvider.vue.d.ts +3 -3
  17. package/dist/agent/ui/AgentWrap.vue.d.ts +21 -97
  18. package/dist/agent/ui/ElAgentAbout.vue.d.ts +1 -1
  19. package/dist/agent/ui/ElAgentChat.vue.d.ts +3 -3
  20. package/dist/agent/ui/ElAgentHeader.vue.d.ts +1 -1
  21. package/dist/agent/ui/ElAgentModeSidebar.vue.d.ts +2 -2
  22. package/dist/agent/ui/ElModeHeader.vue.d.ts +1 -1
  23. package/dist/agent/ui/ElSidebar.vue.d.ts +1 -1
  24. package/dist/agent/utils.d.ts +4 -3
  25. package/dist/agent.js +46 -57
  26. package/dist/agent.js.map +1 -1
  27. package/dist/clients/AuthClient.d.ts +1 -1
  28. package/dist/clients/UserClient.d.ts +3 -3
  29. package/dist/clients/types.d.ts +2 -3
  30. package/dist/constants/socialPlatforms.d.ts +1 -1
  31. package/dist/demo/index.d.ts +37 -37
  32. package/dist/demo.js.map +1 -1
  33. package/dist/index.d.ts +2 -2
  34. package/dist/sdk.css +1 -1
  35. package/dist/sdk.js +2 -2
  36. package/dist/sdkClient-IfuVpXGX.js +637 -0
  37. package/dist/sdkClient-IfuVpXGX.js.map +1 -0
  38. package/dist/sdkClient.d.ts +24 -25
  39. package/dist/sdkStorage.d.ts +1 -1
  40. package/dist/socialPlatforms-Ck-b3SnQ.js.map +1 -1
  41. package/dist/useWidgetState-BGtx6NKD.js +15 -0
  42. package/dist/useWidgetState-BGtx6NKD.js.map +1 -0
  43. package/dist/widget/PLWidget.d.ts +3 -3
  44. package/dist/widget/composables/usePLWidget.d.ts +2 -2
  45. package/dist/widget/composables/useWidgetState.d.ts +277 -0
  46. package/dist/widget/ui/AgentWidgetInline.vue.d.ts +5 -6
  47. package/dist/widget/ui/AgentWidgetModal.vue.d.ts +4 -5
  48. package/dist/widget/ui/AgentWidgetPopup.vue.d.ts +4 -5
  49. package/dist/widget.js +12 -11
  50. package/dist/widget.js.map +1 -1
  51. package/package.json +2 -2
  52. package/dist/AgentProvider.vue_vue_type_script_setup_true_lang-J2dPA8gh.js.map +0 -1
  53. package/dist/AgentWidgetInline-a7B42aCD.js +0 -37
  54. package/dist/AgentWidgetInline-a7B42aCD.js.map +0 -1
  55. package/dist/AgentWidgetModal-DmiBPAeW.js +0 -68
  56. package/dist/AgentWidgetModal-DmiBPAeW.js.map +0 -1
  57. package/dist/AgentWidgetPopup-kDs-plgY.js +0 -122
  58. package/dist/AgentWidgetPopup-kDs-plgY.js.map +0 -1
  59. package/dist/AgentWrap.vue_vue_type_script_setup_true_lang-Cc3E_MFR.js.map +0 -1
  60. package/dist/agent/ClientAudio.d.ts +0 -102
  61. package/dist/agent/constants.d.ts +0 -16
  62. package/dist/sdkClient-B3EKDRYb.js +0 -1094
  63. package/dist/sdkClient-B3EKDRYb.js.map +0 -1
  64. package/dist/utils/base.d.ts +0 -14
  65. package/dist/utils/color.d.ts +0 -12
  66. package/dist/utils/cookies.d.ts +0 -47
  67. package/dist/utils/id.d.ts +0 -27
  68. package/dist/utils/logger.d.ts +0 -49
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkClient-IfuVpXGX.js","sources":["../api.ts","../../../node_modules/.pnpm/nanostores@1.1.1/node_modules/nanostores/clean-stores/index.js","../../../node_modules/.pnpm/nanostores@1.1.1/node_modules/nanostores/atom/index.js","../sdkStorage.ts","../clients/AuthClient.ts","../clients/ChatClient.ts","../clients/UserClient.ts","../sdkClient.ts"],"sourcesContent":["import type { Hono } from 'hono'\nimport { APP_PORT, APP_PROD_URL } from '@pagelines/core'\nimport { hc } from 'hono/client'\nimport { cookieUtil } from '@pagelines/core'\n\nexport interface ApiClientSettings {\n isDev: boolean\n apiBase?: string\n [key: string]: unknown\n}\n\n/**\n * Create fully typed Hono RPC client for PageLines SDK\n *\n * @template TAppType - The Hono app type from the server (enables full type safety)\n * @param settings - Configuration for API base URL and environment\n * @param responseHandler - Optional handler to process ApiResponse for auto user/token updates\n * @returns Typed Hono client with response interceptor\n *\n * @example\n * ```typescript\n * import type { SDKAppType } from '@/modules/main/server'\n * const client = createApiClient<SDKAppType>({ isDev: true })\n * const response = await client.api.auth['check-email'].$post({ json: { email } })\n * ```\n */\nexport function createApiClient<TAppType extends Hono = any>(\n settings: ApiClientSettings,\n responseHandler?: (response: any) => void,\n): ReturnType<typeof hc<TAppType>> {\n // Auto-detect API base URL\n const baseUrl = settings.apiBase || (settings.isDev ? `http://localhost:${APP_PORT}` : APP_PROD_URL)\n\n // Create typed Hono RPC client with response interceptor\n const client = hc<TAppType>(baseUrl, {\n fetch: async (input: RequestInfo | URL, init?: RequestInit) => {\n const token = cookieUtil.getAuthToken()\n\n const response = await fetch(input, {\n ...init,\n headers: {\n ...init?.headers,\n 'Content-Type': 'application/json',\n // Only include Authorization header if token exists\n ...(token && { 'Authorization': `Bearer ${token}` }),\n },\n // Use 'omit' for Bearer tokens (not cookies) to allow CORS wildcard origin\n credentials: 'omit',\n })\n\n // Intercept response to process ApiResponse pattern\n if (responseHandler) {\n // Wrap the original response's json method directly\n const originalJson = response.json.bind(response)\n\n // Override json method on the response object itself\n response.json = async () => {\n const result = await originalJson()\n\n // Process ApiResponse pattern if it has user/token fields\n if (typeof result === 'object' && result !== null) {\n if ('ok' in result && ('user' in result || 'token' in result)) {\n responseHandler(result)\n }\n }\n\n return result\n }\n }\n\n return response\n },\n })\n\n return client\n}\n","import { cleanTasks } from '../task/index.js'\n\nexport let clean = Symbol('clean')\n\nexport let cleanStores = (...stores) => {\n if (process.env.NODE_ENV === 'production') {\n throw new Error(\n 'cleanStores() can be used only during development or tests'\n )\n }\n cleanTasks()\n for (let $store of stores) {\n if ($store) {\n if ($store.mocked) delete $store.mocked\n if ($store[clean]) $store[clean]()\n }\n }\n}\n","import { clean } from '../clean-stores/index.js'\n\nlet listenerQueue = []\nlet lqIndex = 0\nconst QUEUE_ITEMS_PER_LISTENER = 4\nexport let epoch = 0\n\n/* @__NO_SIDE_EFFECTS__ */\nexport const atom = initialValue => {\n let listeners = []\n let $atom = {\n get() {\n if (!$atom.lc) {\n $atom.listen(() => {})()\n }\n return $atom.value\n },\n lc: 0,\n listen(listener) {\n $atom.lc = listeners.push(listener)\n\n return () => {\n for (\n let i = lqIndex + QUEUE_ITEMS_PER_LISTENER;\n i < listenerQueue.length;\n\n ) {\n if (listenerQueue[i] === listener) {\n listenerQueue.splice(i, QUEUE_ITEMS_PER_LISTENER)\n } else {\n i += QUEUE_ITEMS_PER_LISTENER\n }\n }\n\n let index = listeners.indexOf(listener)\n if (~index) {\n listeners.splice(index, 1)\n if (!--$atom.lc) $atom.off()\n }\n }\n },\n notify(oldValue, changedKey) {\n epoch++\n let runListenerQueue = !listenerQueue.length\n for (let listener of listeners) {\n listenerQueue.push(listener, $atom.value, oldValue, changedKey)\n }\n\n if (runListenerQueue) {\n for (\n lqIndex = 0;\n lqIndex < listenerQueue.length;\n lqIndex += QUEUE_ITEMS_PER_LISTENER\n ) {\n listenerQueue[lqIndex](\n listenerQueue[lqIndex + 1],\n listenerQueue[lqIndex + 2],\n listenerQueue[lqIndex + 3]\n )\n }\n listenerQueue.length = 0\n }\n },\n /* It will be called on last listener unsubscribing.\n We will redefine it in onMount and onStop. */\n off() {},\n set(newValue) {\n let oldValue = $atom.value\n if (oldValue !== newValue) {\n $atom.value = newValue\n $atom.notify(oldValue)\n }\n },\n subscribe(listener) {\n let unbind = $atom.listen(listener)\n listener($atom.value)\n return unbind\n },\n value: initialValue\n }\n\n if (process.env.NODE_ENV !== 'production') {\n $atom[clean] = () => {\n listeners = []\n $atom.lc = 0\n $atom.off()\n }\n }\n\n return $atom\n}\n\nexport const readonlyType = store => store\n","import type { Ref } from 'vue'\nimport type { EnrichedUser } from '@pagelines/core'\nimport { atom } from 'nanostores'\nimport { watch } from 'vue'\nimport { cookieUtil, createLogger } from '@pagelines/core'\n\n// Global nanostores for persistence across page navigations\n// These must be outside the class to survive view transitions\nconst $globalActiveUser = atom<EnrichedUser | undefined>(undefined)\nconst $globalToken = atom<string | null>(null)\n\n/**\n * SDKStorage - Handles all storage, sync, and persistence for PageLinesSDK\n *\n * Extracted from PageLinesSDK to keep the main class focused on public API methods.\n * Manages localStorage, cookies, and nanostor synchronization for state persistence.\n */\nexport class SDKStorage {\n private logger = createLogger('SDKStorage')\n\n /**\n * Check if localStorage is fully functional (some test environments provide partial mocks)\n */\n private isLocalStorageFunctional(): boolean {\n return typeof window !== 'undefined'\n && typeof localStorage?.getItem === 'function'\n && typeof localStorage?.setItem === 'function'\n && typeof localStorage?.removeItem === 'function'\n }\n\n /**\n * Sync Vue reactive refs with global nanostores for cross-page persistence\n */\n syncWithGlobalStores(activeUser: Ref<EnrichedUser | undefined>, token: Ref<string | null>): void {\n // 1. Restore from global store on init\n const storedUser = $globalActiveUser.get()\n const storedToken = $globalToken.get()\n\n if (storedUser) {\n activeUser.value = storedUser\n }\n if (storedToken) {\n token.value = storedToken\n }\n\n // 2. Vue refs → global stores (for persistence)\n watch(activeUser, (newUser) => {\n $globalActiveUser.set(newUser)\n }, { immediate: true })\n\n watch(token, (newToken) => {\n $globalToken.set(newToken)\n }, { immediate: true })\n\n // 3. Global stores → Vue refs (for cross-page updates)\n $globalActiveUser.subscribe((newUser) => {\n if (newUser !== activeUser.value) {\n activeUser.value = newUser\n }\n })\n\n $globalToken.subscribe((newToken) => {\n if (newToken !== token.value) {\n token.value = newToken\n }\n })\n }\n\n /**\n * Load user and token from browser storage on initialization\n */\n loadFromStorage(activeUser: Ref<EnrichedUser | undefined>, token: Ref<string | null>): void {\n if (typeof window === 'undefined')\n return\n\n // Load token from cookie\n const savedToken = cookieUtil.getAuthToken()\n if (savedToken) {\n token.value = savedToken\n }\n\n // Try to load user from localStorage for immediate availability\n if (this.isLocalStorageFunctional()) {\n try {\n const savedUser = localStorage.getItem('pagelines-user')\n if (savedUser) {\n activeUser.value = JSON.parse(savedUser)\n }\n } catch (error) {\n this.logger.error('Failed to load user from localStorage', { data: error })\n }\n }\n }\n\n /**\n * Save current user and token to browser storage\n */\n saveToStorage(activeUser: Ref<EnrichedUser | undefined>, token: Ref<string | null>): void {\n if (typeof window === 'undefined')\n return\n\n // Save token to cookie using app's cookie utility\n if (token.value) {\n cookieUtil.setAuthToken(token.value)\n } else {\n cookieUtil.removeAuthToken()\n }\n\n // Save user to localStorage for quick loading\n if (this.isLocalStorageFunctional()) {\n try {\n if (activeUser.value) {\n localStorage.setItem('pagelines-user', JSON.stringify(activeUser.value))\n } else {\n localStorage.removeItem('pagelines-user')\n }\n } catch (error) {\n this.logger.error('Failed to save user to localStorage', { data: error })\n }\n }\n }\n\n /**\n * Clear all stored user data and tokens\n */\n clearStorage(): void {\n if (typeof window === 'undefined')\n return\n\n cookieUtil.removeAuthToken()\n\n if (this.isLocalStorageFunctional()) {\n try {\n localStorage.removeItem('pagelines-user')\n } catch (error) {\n this.logger.error('Failed to clear user from localStorage', { data: error })\n }\n }\n\n // Clear global stores\n $globalActiveUser.set(undefined)\n $globalToken.set(null)\n }\n\n /**\n * Generic localStorage getter\n */\n getItem(key: string): string | null {\n if (!this.isLocalStorageFunctional())\n return null\n\n try {\n return localStorage.getItem(key)\n } catch (error) {\n this.logger.error('Failed to get item from localStorage', { key, error })\n return null\n }\n }\n\n /**\n * Generic localStorage setter\n */\n setItem(key: string, value: string): void {\n if (!this.isLocalStorageFunctional())\n return\n\n try {\n localStorage.setItem(key, value)\n } catch (error) {\n this.logger.error('Failed to set item in localStorage', { key, error })\n }\n }\n}\n","import type { EnrichedUser } from '@pagelines/core'\nimport { APP_PORT, APP_PROD_URL } from '@pagelines/core'\nimport type { SDKContext } from './types'\n\nexport class AuthClient {\n constructor(private ctx: SDKContext) {}\n\n async sendCode(email: string): Promise<void> {\n this.ctx.loading.value = true\n this.ctx.error.value = null\n\n try {\n const response = await this.ctx.api.auth['check-email'].$post({\n json: { email },\n })\n\n const data = await response.json()\n\n if (!data.ok) {\n this.ctx.error.value = data.error\n throw new Error(data.error)\n }\n } catch (err) {\n this.ctx.logger.error('Send code error', { data: err })\n const errorMessage = err instanceof Error ? err.message : 'Failed to send verification code'\n this.ctx.error.value = errorMessage\n throw err\n } finally {\n this.ctx.loading.value = false\n }\n }\n\n async verifyCode(email: string, code: string): Promise<void> {\n this.ctx.loading.value = true\n this.ctx.error.value = null\n\n try {\n const response = await this.ctx.api.auth['verify-code'].$post({\n json: { email, code },\n })\n\n const data = await response.json()\n\n if (!data.ok) {\n this.ctx.error.value = data.error\n throw new Error(data.error)\n }\n } catch (err) {\n this.ctx.logger.error('Verify code error', { data: err })\n const errorMessage = err instanceof Error ? err.message : 'Failed to verify code'\n this.ctx.error.value = errorMessage\n throw err\n } finally {\n this.ctx.loading.value = false\n }\n }\n\n async login(email: string, password: string): Promise<void> {\n this.ctx.loading.value = true\n this.ctx.error.value = null\n\n try {\n const response = await this.ctx.api.auth.login.$post({\n json: { email, password },\n })\n\n const data = await response.json()\n\n if (!data.ok) {\n this.ctx.error.value = data.error\n throw new Error(data.error)\n }\n } catch (err) {\n this.ctx.logger.error('Login error', { data: err })\n const errorMessage = err instanceof Error ? err.message : 'Login failed'\n this.ctx.error.value = errorMessage\n throw err\n } finally {\n this.ctx.loading.value = false\n }\n }\n\n async logout(): Promise<void> {\n this.ctx.loading.value = true\n this.ctx.error.value = null\n\n try {\n await this.ctx.api.auth.logout.$post()\n\n // Clear local state\n this.ctx.activeUser.value = undefined\n this.ctx.token.value = null\n this.ctx.storage.clearStorage()\n } catch (err) {\n this.ctx.logger.error('Logout error (user still logged out locally)', { data: err })\n // Still clear local state even if API call fails\n this.ctx.activeUser.value = undefined\n this.ctx.token.value = null\n this.ctx.storage.clearStorage()\n } finally {\n this.ctx.loading.value = false\n }\n }\n\n async getCurrentUser(): Promise<EnrichedUser | undefined> {\n if (!this.ctx.token.value) {\n return undefined\n }\n\n this.ctx.loading.value = true\n\n try {\n const response = await this.ctx.api.auth.me.$get()\n const data = await response.json()\n\n if (!data.ok) {\n this.ctx.error.value = data.error\n // Clear invalid session\n if (data.error.includes('Authentication')) {\n this.ctx.activeUser.value = undefined\n this.ctx.token.value = null\n this.ctx.storage.clearStorage()\n }\n return undefined\n }\n\n return data.user\n } catch (err) {\n this.ctx.logger.error('Get current user error', { data: err })\n this.ctx.error.value = err instanceof Error ? err.message : 'Failed to get user info'\n return undefined\n } finally {\n this.ctx.loading.value = false\n }\n }\n\n async requestAuthCode(args: { email: string }): Promise<boolean> {\n this.ctx.loading.value = true\n this.ctx.error.value = null\n\n try {\n const response = await this.ctx.api.auth['check-email'].$post({\n json: { email: args.email },\n })\n\n const data = await response.json()\n\n if (!data.ok) {\n this.ctx.error.value = data.error\n this.ctx.logger.error('Failed to request auth code', { email: args.email, error: data.error })\n return false\n }\n\n this.ctx.logger.info('Auth code requested successfully', { email: args.email })\n return true\n } catch (err) {\n this.ctx.logger.error('Request auth code error', { email: args.email, error: err })\n this.ctx.error.value = err instanceof Error ? err.message : 'Failed to request auth code'\n return false\n } finally {\n this.ctx.loading.value = false\n }\n }\n\n async loginWithCode(args: {\n email: string\n code: string\n orgId?: string\n autoCreateContact?: boolean\n }): Promise<boolean> {\n this.ctx.loading.value = true\n this.ctx.error.value = null\n\n try {\n const response = await this.ctx.api.auth['verify-code'].$post({\n json: { email: args.email, code: args.code },\n })\n\n const data = await response.json()\n\n if (!data.ok) {\n this.ctx.error.value = data.error\n this.ctx.logger.error('Login failed', { email: args.email, error: data.error })\n return false\n }\n\n // Response interceptor automatically processes user/token updates\n this.ctx.logger.info('Login successful', { email: args.email })\n\n return true\n } catch (err) {\n this.ctx.logger.error('Login with code error', { email: args.email, error: err })\n this.ctx.error.value = err instanceof Error ? err.message : 'Login failed'\n return false\n } finally {\n this.ctx.loading.value = false\n }\n }\n\n loginWithGoogle(args?: { onSuccess?: (user: EnrichedUser) => void, onError?: (error: string) => void }): void {\n if (typeof window === 'undefined') {\n this.ctx.logger.error('loginWithGoogle: Only available in browser')\n return\n }\n\n const apiBase = this.ctx.apiBase || (this.ctx.isDev ? `http://localhost:${APP_PORT}` : APP_PROD_URL)\n const origin = window.location.origin\n const popupUrl = `${apiBase}/auth/google-popup?origin=${encodeURIComponent(origin)}`\n\n // Open centered popup\n const width = 500\n const height = 600\n const left = window.screenX + (window.outerWidth - width) / 2\n const top = window.screenY + (window.outerHeight - height) / 2\n const popup = window.open(\n popupUrl,\n 'google-auth',\n `width=${width},height=${height},left=${left},top=${top},popup=yes`,\n )\n\n if (!popup) {\n const msg = 'Popup was blocked. Please allow popups for this site.'\n this.ctx.error.value = msg\n args?.onError?.(msg)\n return\n }\n\n // Listen for postMessage from popup\n const handler = (event: MessageEvent) => {\n // Validate origin -- must be our API base\n const expectedOrigin = new URL(apiBase).origin\n if (event.origin !== expectedOrigin) return\n\n if (event.data?.type === 'auth-success') {\n window.removeEventListener('message', handler)\n const { token, user } = event.data\n\n // Process the auth response the same way as other login methods\n this.ctx.processApiResponse({ ok: true, data: {}, token, user })\n\n this.ctx.logger.info('Google login successful')\n args?.onSuccess?.(user)\n } else if (event.data?.type === 'auth-error') {\n window.removeEventListener('message', handler)\n const errorMsg = event.data.error || 'Google authentication failed'\n this.ctx.error.value = errorMsg\n this.ctx.logger.error('Google login failed', { error: errorMsg })\n args?.onError?.(errorMsg)\n }\n }\n\n window.addEventListener('message', handler)\n\n // Clean up listener if popup is closed without completing auth\n const checkClosed = setInterval(() => {\n if (popup.closed) {\n clearInterval(checkClosed)\n window.removeEventListener('message', handler)\n }\n }, 500)\n }\n}\n","import type { ApiResponse } from '@pagelines/core'\nimport { APP_PORT, APP_PROD_URL } from '@pagelines/core'\nimport type { SDKContext } from './types'\n\nexport class ChatClient {\n constructor(private ctx: SDKContext) {}\n\n async chatStream(args: {\n handle: string\n message: string\n attachments?: Array<{ type: string, url: string, name: string, mimeType: string, mediaId?: string }>\n conversationId?: string\n history?: Array<{ role: 'user' | 'assistant', content: string }>\n visitorId?: string\n context?: string\n onDelta: (text: string) => void\n onDone: (conversationId: string) => void\n onError: (error: string) => void\n onStatus?: (status: string) => void\n }): Promise<void> {\n const apiBase = this.ctx.apiBase || (this.ctx.isDev ? `http://localhost:${APP_PORT}` : APP_PROD_URL)\n const url = `${apiBase}/api/agent/public/${encodeURIComponent(args.handle)}/chat/stream`\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n message: args.message,\n conversationId: args.conversationId,\n history: args.history,\n visitorId: args.visitorId,\n context: args.context,\n attachments: args.attachments,\n }),\n })\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({ error: 'Request failed' })) as { error?: string }\n args.onError(errorBody.error || `HTTP ${response.status}`)\n return\n }\n\n const reader = response.body?.getReader()\n if (!reader) {\n args.onError('No response stream')\n return\n }\n\n const decoder = new TextDecoder()\n let buffer = ''\n let resolvedConversationId = args.conversationId || ''\n\n while (true) {\n const { done, value } = await reader.read()\n if (done)\n break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n if (!line.startsWith('data: '))\n continue\n\n const data = line.slice(6).trim()\n if (data === '[DONE]') {\n args.onDone(resolvedConversationId)\n return\n }\n\n try {\n const chunk = JSON.parse(data) as {\n choices?: Array<{ delta?: { content?: string } }>\n pl_metadata?: { conversationId?: string }\n pl_status?: string\n }\n\n // Handle status events (e.g. \"Waking up...\")\n if (chunk.pl_status) {\n args.onStatus?.(chunk.pl_status)\n continue\n }\n\n if (chunk.pl_metadata?.conversationId) {\n resolvedConversationId = chunk.pl_metadata.conversationId\n }\n\n const delta = chunk.choices?.[0]?.delta\n if (delta?.content) {\n args.onDelta(delta.content)\n }\n } catch {\n // Skip malformed chunks\n }\n }\n }\n\n // Stream ended without [DONE]\n args.onDone(resolvedConversationId)\n } catch (error) {\n args.onError(error instanceof Error ? error.message : 'Stream failed')\n }\n }\n\n async chatMessage(args: {\n handle: string\n message: string\n conversationId?: string\n visitorId?: string\n context?: string\n }): Promise<{ conversationId: string, content: string } | undefined> {\n const apiBase = this.ctx.apiBase || (this.ctx.isDev ? `http://localhost:${APP_PORT}` : APP_PROD_URL)\n const url = `${apiBase}/api/agent/public/${encodeURIComponent(args.handle)}/chat`\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n message: args.message,\n conversationId: args.conversationId,\n visitorId: args.visitorId,\n context: args.context,\n }),\n })\n\n const data = await response.json() as ApiResponse<{\n conversationId: string\n message: { role: 'assistant', content: string }\n }>\n\n if (!data.ok || !data.data) {\n this.ctx.logger.error('chatMessage failed', { error: !data.ok && 'error' in data ? data.error : 'Unknown' })\n return undefined\n }\n\n return {\n conversationId: data.data.conversationId,\n content: data.data.message.content,\n }\n } catch (err) {\n this.ctx.logger.error('chatMessage error', { error: err })\n return undefined\n }\n }\n\n}\n","import type { AgentConfig } from '@pagelines/core'\nimport { objectId } from '@pagelines/core'\nimport type { SDKContext } from './types'\n\nexport class UserClient {\n constructor(private ctx: SDKContext) {}\n\n async getPublicAgent(args: { handle: string }): Promise<AgentConfig | undefined> {\n this.ctx.loading.value = true\n this.ctx.error.value = null\n\n try {\n const response = await this.ctx.api.agent.public[':handle'].$get({\n param: { handle: args.handle },\n })\n\n const data = await response.json()\n\n if (!data.ok) {\n this.ctx.error.value = data.error\n this.ctx.logger.error('Failed to fetch public agent', { handle: args.handle, error: data.error })\n return undefined\n }\n\n return data.data\n } catch (err) {\n this.ctx.logger.error('Get public agent error', { handle: args.handle, error: err })\n this.ctx.error.value = err instanceof Error ? err.message : 'Failed to fetch agent'\n return undefined\n } finally {\n this.ctx.loading.value = false\n }\n }\n\n async getAgentByEmail(args: { email: string }): Promise<AgentConfig | undefined> {\n this.ctx.loading.value = true\n this.ctx.error.value = null\n\n try {\n const response = await this.ctx.api.agent['by-email'][':email'].$get({\n param: { email: args.email },\n })\n\n const data = await response.json()\n\n if (!data.ok) {\n this.ctx.error.value = data.error\n this.ctx.logger.error('Failed to fetch agent by email', { email: args.email, error: data.error })\n return undefined\n }\n\n return data.data\n } catch (err) {\n this.ctx.logger.error('Get agent by email error', { email: args.email, error: err })\n this.ctx.error.value = err instanceof Error ? err.message : 'Failed to fetch agent'\n return undefined\n } finally {\n this.ctx.loading.value = false\n }\n }\n\n generateAnonId(): string {\n const storageKey = 'pagelinesAnonId'\n let anonId = this.ctx.storage.getItem(storageKey)\n\n if (!anonId) {\n anonId = objectId({ prefix: 'anon' })\n this.ctx.storage.setItem(storageKey, anonId)\n }\n\n return anonId\n }\n\n track(args: {\n event: 'view_profile' | 'profile_interaction'\n agentId: string\n properties?: Record<string, any>\n }): void {\n try {\n // Track event via postMessage to parent window if embedded\n if (typeof window !== 'undefined' && window.parent !== window) {\n window.parent.postMessage({\n type: 'pagelines_track',\n event: args.event,\n agentId: args.agentId,\n properties: args.properties || {},\n }, '*')\n }\n\n this.ctx.logger.info('SDK event tracked', { event: args.event, agentId: args.agentId })\n } catch (err) {\n this.ctx.logger.error('Track event error', { error: err, args })\n }\n }\n}\n","import type { hc } from 'hono/client'\n// Use stub type for production builds (aliased in vite.config.sdk.ts)\n// Dev uses real SDKAppType from server via alias\nimport type { SDKAppType } from '@/modules/main/server'\nimport type { AgentConfig, EnrichedUser } from '@pagelines/core'\nimport type { ApiResponse } from '@pagelines/core'\nimport { objectId, SettingsObject } from '@pagelines/core'\nimport { computed, ref } from 'vue'\nimport { createApiClient } from './api'\nimport { SDKStorage } from './sdkStorage'\nimport { AuthClient } from './clients/AuthClient'\nimport { ChatClient } from './clients/ChatClient'\nimport { UserClient } from './clients/UserClient'\nimport type { SDKContext } from './clients/types'\n\nexport interface PageLinesSDKSettings {\n apiBase?: string\n isDev?: boolean\n [key: string]: unknown\n}\n\n/**\n * Browser-only singleton manager\n * Browser: Uses globalThis for cross-bundle singleton (www + widget)\n * Node.js SSR: No singleton - each request gets new instance (prevents request bleeding)\n */\nclass SDKGlobal {\n private key = '__PAGELINES_SDK__'\n\n get(): PageLinesSDK | undefined {\n if (typeof window === 'undefined')\n return undefined\n return (globalThis as any)[this.key]\n }\n\n set(instance: PageLinesSDK): void {\n if (typeof window !== 'undefined')\n (globalThis as any)[this.key] = instance\n }\n\n delete(): void {\n if (typeof window !== 'undefined')\n delete (globalThis as any)[this.key]\n }\n}\n\n// Module-scoped singleton manager\nconst sdkGlobal = new SDKGlobal()\n\nexport class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {\n /**\n * Get singleton instance in browser (creates if doesn't exist)\n * Node.js: Always creates new instance (no singleton)\n * Recommended: Use this instead of constructor for shared state\n */\n static getInstance(settings: PageLinesSDKSettings = {}): PageLinesSDK {\n // Browser: return singleton or create\n // Node: always create new (no singleton)\n return sdkGlobal.get() || new PageLinesSDK(settings)\n }\n\n // Vue reactive state\n activeUser = ref<EnrichedUser | undefined>()\n token = ref<string | null>(null)\n loading = ref(false)\n error = ref<string | null>(null)\n apiBase = this.settings.apiBase || undefined\n\n // Storage handler for persistence\n private storage = new SDKStorage()\n\n // Auto-managed session ID for usage tracking\n private sessionId = objectId({ prefix: 'ses' })\n\n get isDev() {\n return this.settings.isDev ?? (\n typeof window !== 'undefined'\n ? window.location.hostname === 'localhost' || window.location.hostname.includes('127.0.0.1')\n : false\n )\n }\n\n // Typed Hono RPC client - uses SDKAppType (auth/self/usage routes only)\n // Initialized in constructor (definite assignment via singleton pattern)\n private apiClient!: ReturnType<typeof hc<SDKAppType>>\n\n // Bypass stub typing for route access (production builds use SDKAppType stub)\n // Runtime types are validated via Zod at API boundaries\n private get api() {\n return (this.apiClient as any).api\n }\n\n // Computed properties derived from activeUser (matches UserClient pattern)\n currentAgent = computed(() => {\n const user = this.activeUser.value\n if (!user?.agents)\n return undefined\n\n const agentId = user.primaryAgentId || user.agents[0]?.agentId\n if (!agentId)\n return undefined\n\n return user.agents.find((a) => a.agentId === agentId)\n })\n\n currentOrg = computed(() => {\n const agent = this.currentAgent.value\n if (!agent?.orgId)\n return undefined\n\n const user = this.activeUser.value\n if (!user?.orgs)\n return undefined\n\n return user.orgs.find((org) => org.orgId === agent.orgId)\n })\n\n // Initialization state\n initialized?: Promise<EnrichedUser | undefined>\n resolveUser?: (value: EnrichedUser | undefined) => void\n\n // Sub-clients (new preferred API surface)\n readonly auth!: AuthClient\n readonly chat!: ChatClient\n readonly user!: UserClient\n\n constructor(settings: PageLinesSDKSettings = {}) {\n // Browser: return existing singleton\n // Node: always create new\n const existing = sdkGlobal.get()\n if (existing) {\n console.debug('[PageLinesSDK] Returning existing singleton instance')\n return existing\n }\n\n super('PageLinesSDK', settings)\n\n // Browser: set singleton reference (no-op in Node)\n sdkGlobal.set(this)\n\n // Create typed Hono RPC client with response handler\n this.apiClient = createApiClient<SDKAppType>(\n { isDev: this.isDev, apiBase: this.apiBase },\n this.processApiResponse.bind(this),\n )\n\n // Build shared context for sub-clients\n const ctx: SDKContext = {\n api: this.api,\n apiBase: this.apiBase,\n isDev: this.isDev,\n activeUser: this.activeUser,\n token: this.token,\n loading: this.loading,\n error: this.error,\n currentAgent: this.currentAgent,\n storage: this.storage,\n sessionId: this.sessionId,\n logger: this.logger,\n processApiResponse: this.processApiResponse.bind(this),\n }\n\n // Initialize sub-clients\n this.auth = new AuthClient(ctx)\n this.chat = new ChatClient(ctx)\n this.user = new UserClient(ctx)\n\n this.logger.info('PageLinesSDK initialized')\n\n // Initialize from storage using handler\n this.storage.loadFromStorage(this.activeUser, this.token)\n\n // Sync with global stores for persistence across navigation\n this.storage.syncWithGlobalStores(this.activeUser, this.token)\n\n // Set up initialization promise (same pattern as UserClient)\n this.initialized = new Promise((resolve) => {\n this.resolveUser = resolve\n })\n\n // Auto-fetch user if token exists (mirrors UserClient pattern)\n if (this.token.value && !this.activeUser.value) {\n this.getCurrentUser().then((user) => {\n if (this.resolveUser) {\n this.resolveUser(user)\n this.resolveUser = undefined\n }\n }).catch((err) => {\n this.logger.error('Auto user fetch failed', { data: err })\n if (this.resolveUser) {\n this.resolveUser(undefined)\n this.resolveUser = undefined\n }\n })\n } else if (this.activeUser.value) {\n // Resolve immediately if we already have a user from storage\n this.resolveUser?.(this.activeUser.value)\n } else {\n // No token, resolve with undefined\n this.resolveUser?.(undefined)\n }\n }\n\n // Process ApiResponse for automatic user/token updates - public for dependency injection\n processApiResponse(response: ApiResponse<any>): void {\n // Handle user updates\n if (response.ok && response.user) {\n this.activeUser.value = response.user\n this.logger.info('User updated from API response', { data: response.user })\n }\n\n // Handle token updates\n if (response.ok && response.token) {\n this.token.value = response.token\n this.storage.saveToStorage(this.activeUser, this.token)\n this.logger.info('Token updated from API response')\n }\n\n // Resolve initialization promise\n if (this.resolveUser && response.ok) {\n this.resolveUser(response.user)\n this.resolveUser = undefined\n }\n }\n\n // Clear all user data and tokens\n clearSession(): void {\n this.logger.info('Clearing session')\n this.activeUser.value = undefined\n this.token.value = null\n this.error.value = null\n this.storage.clearStorage()\n }\n\n // Full reset - clears session + state + destroys singleton\n clear(): void {\n this.logger.info('Clearing SDK completely')\n\n // 1. Clear session data\n this.clearSession()\n\n // 2. Reset other state\n this.loading.value = false\n this.sessionId = objectId({ prefix: 'ses' })\n\n // 3. Destroy singleton (no-op in Node)\n sdkGlobal.delete()\n }\n\n // Backward-compatible delegates — these forward to sub-clients\n // Can be removed in a future breaking change\n async sendCode(email: string): Promise<void> { return this.auth.sendCode(email) }\n async verifyCode(email: string, code: string): Promise<void> { return this.auth.verifyCode(email, code) }\n async login(email: string, password: string): Promise<void> { return this.auth.login(email, password) }\n async logout(): Promise<void> { return this.auth.logout() }\n async getCurrentUser(): Promise<EnrichedUser | undefined> { return this.auth.getCurrentUser() }\n async requestAuthCode(args: { email: string }): Promise<boolean> { return this.auth.requestAuthCode(args) }\n async loginWithCode(args: { email: string, code: string, orgId?: string, autoCreateContact?: boolean }): Promise<boolean> { return this.auth.loginWithCode(args) }\n loginWithGoogle(args?: { onSuccess?: (user: EnrichedUser) => void, onError?: (error: string) => void }): void { return this.auth.loginWithGoogle(args) }\n\n async chatStream(args: Parameters<ChatClient['chatStream']>[0]): Promise<void> { return this.chat.chatStream(args) }\n async chatMessage(args: Parameters<ChatClient['chatMessage']>[0]): Promise<{ conversationId: string, content: string } | undefined> { return this.chat.chatMessage(args) }\n\n async getPublicAgent(args: { handle: string }): Promise<AgentConfig | undefined> { return this.user.getPublicAgent(args) }\n async getAgentByEmail(args: { email: string }): Promise<AgentConfig | undefined> { return this.user.getAgentByEmail(args) }\n generateAnonId(): string { return this.user.generateAnonId() }\n track(args: Parameters<UserClient['track']>[0]): void { return this.user.track(args) }\n}\n"],"names":["createApiClient","settings","responseHandler","baseUrl","APP_PORT","APP_PROD_URL","hc","__name","input","init","token","cookieUtil","response","originalJson","result","clean","listenerQueue","lqIndex","QUEUE_ITEMS_PER_LISTENER","atom","initialValue","listeners","$atom","listener","i","index","oldValue","changedKey","runListenerQueue","newValue","unbind","$globalActiveUser","$globalToken","_SDKStorage","__publicField","createLogger","activeUser","storedUser","storedToken","watch","newUser","newToken","savedToken","savedUser","error","key","value","SDKStorage","_AuthClient","ctx","email","data","err","errorMessage","code","password","args","apiBase","origin","popupUrl","width","height","left","top","popup","msg","handler","event","expectedOrigin","user","errorMsg","checkClosed","AuthClient","_ChatClient","url","errorBody","reader","decoder","buffer","resolvedConversationId","done","lines","line","chunk","delta","ChatClient","_UserClient","storageKey","anonId","objectId","UserClient","_SDKGlobal","instance","SDKGlobal","sdkGlobal","_PageLinesSDK","SettingsObject","existing","ref","computed","agentId","a","agent","org","resolve","PageLinesSDK"],"mappings":"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","x_google_ignoreList":[1,2]}
@@ -1,5 +1,4 @@
1
- import { Agent, EnrichedUser, ApiResponse } from '@pagelines/types';
2
- import { SettingsObject } from '../../src/utils/base';
1
+ import { AgentConfig, EnrichedUser, ApiResponse, SettingsObject } from '@pagelines/core';
3
2
  import { AuthClient } from './clients/AuthClient';
4
3
  import { ChatClient } from './clients/ChatClient';
5
4
  import { UserClient } from './clients/UserClient';
@@ -33,7 +32,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
33
32
  alt?: string | undefined;
34
33
  context?: "avatar" | "cover" | "general" | undefined;
35
34
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
36
- quality?: "high" | "low" | "standard" | undefined;
35
+ quality?: "low" | "standard" | "high" | undefined;
37
36
  createdAt?: string | undefined;
38
37
  updatedAt?: string | undefined;
39
38
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -78,7 +77,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
78
77
  alt?: string | undefined;
79
78
  context?: "avatar" | "cover" | "general" | undefined;
80
79
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
81
- quality?: "high" | "low" | "standard" | undefined;
80
+ quality?: "low" | "standard" | "high" | undefined;
82
81
  createdAt?: string | undefined;
83
82
  updatedAt?: string | undefined;
84
83
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -101,7 +100,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
101
100
  alt?: string | undefined;
102
101
  context?: "avatar" | "cover" | "general" | undefined;
103
102
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
104
- quality?: "high" | "low" | "standard" | undefined;
103
+ quality?: "low" | "standard" | "high" | undefined;
105
104
  createdAt?: string | undefined;
106
105
  updatedAt?: string | undefined;
107
106
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -132,7 +131,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
132
131
  alt?: string | undefined;
133
132
  context?: "avatar" | "cover" | "general" | undefined;
134
133
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
135
- quality?: "high" | "low" | "standard" | undefined;
134
+ quality?: "low" | "standard" | "high" | undefined;
136
135
  createdAt?: string | undefined;
137
136
  updatedAt?: string | undefined;
138
137
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -155,7 +154,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
155
154
  alt?: string | undefined;
156
155
  context?: "avatar" | "cover" | "general" | undefined;
157
156
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
158
- quality?: "high" | "low" | "standard" | undefined;
157
+ quality?: "low" | "standard" | "high" | undefined;
159
158
  createdAt?: string | undefined;
160
159
  updatedAt?: string | undefined;
161
160
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -189,7 +188,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
189
188
  alt?: string | undefined;
190
189
  context?: "avatar" | "cover" | "general" | undefined;
191
190
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
192
- quality?: "high" | "low" | "standard" | undefined;
191
+ quality?: "low" | "standard" | "high" | undefined;
193
192
  createdAt?: string | undefined;
194
193
  updatedAt?: string | undefined;
195
194
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -211,7 +210,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
211
210
  alt?: string | undefined;
212
211
  context?: "avatar" | "cover" | "general" | undefined;
213
212
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
214
- quality?: "high" | "low" | "standard" | undefined;
213
+ quality?: "low" | "standard" | "high" | undefined;
215
214
  createdAt?: string | undefined;
216
215
  updatedAt?: string | undefined;
217
216
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -224,7 +223,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
224
223
  email?: string | null | undefined;
225
224
  website?: string | null | undefined;
226
225
  accounts?: {
227
- platform: "x" | "email" | "website" | "linkedin" | "facebook" | "tiktok" | "youtube" | "github" | "instagram" | "threads" | "phone";
226
+ platform: "x" | "linkedin" | "facebook" | "tiktok" | "youtube" | "github" | "instagram" | "threads" | "email" | "phone" | "website";
228
227
  handle: string;
229
228
  }[] | null | undefined;
230
229
  model?: string | null | undefined;
@@ -271,7 +270,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
271
270
  alt?: string | undefined;
272
271
  context?: "avatar" | "cover" | "general" | undefined;
273
272
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
274
- quality?: "high" | "low" | "standard" | undefined;
273
+ quality?: "low" | "standard" | "high" | undefined;
275
274
  createdAt?: string | undefined;
276
275
  updatedAt?: string | undefined;
277
276
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -316,7 +315,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
316
315
  alt?: string | undefined;
317
316
  context?: "avatar" | "cover" | "general" | undefined;
318
317
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
319
- quality?: "high" | "low" | "standard" | undefined;
318
+ quality?: "low" | "standard" | "high" | undefined;
320
319
  createdAt?: string | undefined;
321
320
  updatedAt?: string | undefined;
322
321
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -339,7 +338,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
339
338
  alt?: string | undefined;
340
339
  context?: "avatar" | "cover" | "general" | undefined;
341
340
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
342
- quality?: "high" | "low" | "standard" | undefined;
341
+ quality?: "low" | "standard" | "high" | undefined;
343
342
  createdAt?: string | undefined;
344
343
  updatedAt?: string | undefined;
345
344
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -370,7 +369,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
370
369
  alt?: string | undefined;
371
370
  context?: "avatar" | "cover" | "general" | undefined;
372
371
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
373
- quality?: "high" | "low" | "standard" | undefined;
372
+ quality?: "low" | "standard" | "high" | undefined;
374
373
  createdAt?: string | undefined;
375
374
  updatedAt?: string | undefined;
376
375
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -393,7 +392,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
393
392
  alt?: string | undefined;
394
393
  context?: "avatar" | "cover" | "general" | undefined;
395
394
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
396
- quality?: "high" | "low" | "standard" | undefined;
395
+ quality?: "low" | "standard" | "high" | undefined;
397
396
  createdAt?: string | undefined;
398
397
  updatedAt?: string | undefined;
399
398
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -427,7 +426,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
427
426
  alt?: string | undefined;
428
427
  context?: "avatar" | "cover" | "general" | undefined;
429
428
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
430
- quality?: "high" | "low" | "standard" | undefined;
429
+ quality?: "low" | "standard" | "high" | undefined;
431
430
  createdAt?: string | undefined;
432
431
  updatedAt?: string | undefined;
433
432
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -449,7 +448,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
449
448
  alt?: string | undefined;
450
449
  context?: "avatar" | "cover" | "general" | undefined;
451
450
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
452
- quality?: "high" | "low" | "standard" | undefined;
451
+ quality?: "low" | "standard" | "high" | undefined;
453
452
  createdAt?: string | undefined;
454
453
  updatedAt?: string | undefined;
455
454
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -462,7 +461,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
462
461
  email?: string | null | undefined;
463
462
  website?: string | null | undefined;
464
463
  accounts?: {
465
- platform: "x" | "email" | "website" | "linkedin" | "facebook" | "tiktok" | "youtube" | "github" | "instagram" | "threads" | "phone";
464
+ platform: "x" | "linkedin" | "facebook" | "tiktok" | "youtube" | "github" | "instagram" | "threads" | "email" | "phone" | "website";
466
465
  handle: string;
467
466
  }[] | null | undefined;
468
467
  model?: string | null | undefined;
@@ -524,7 +523,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
524
523
  alt?: string | undefined;
525
524
  context?: "avatar" | "cover" | "general" | undefined;
526
525
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
527
- quality?: "high" | "low" | "standard" | undefined;
526
+ quality?: "low" | "standard" | "high" | undefined;
528
527
  createdAt?: string | undefined;
529
528
  updatedAt?: string | undefined;
530
529
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -546,7 +545,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
546
545
  alt?: string | undefined;
547
546
  context?: "avatar" | "cover" | "general" | undefined;
548
547
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
549
- quality?: "high" | "low" | "standard" | undefined;
548
+ quality?: "low" | "standard" | "high" | undefined;
550
549
  createdAt?: string | undefined;
551
550
  updatedAt?: string | undefined;
552
551
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -559,7 +558,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
559
558
  email?: string | null | undefined;
560
559
  website?: string | null | undefined;
561
560
  accounts?: {
562
- platform: "x" | "email" | "website" | "linkedin" | "facebook" | "tiktok" | "youtube" | "github" | "instagram" | "threads" | "phone";
561
+ platform: "x" | "linkedin" | "facebook" | "tiktok" | "youtube" | "github" | "instagram" | "threads" | "email" | "phone" | "website";
563
562
  handle: string;
564
563
  }[] | null | undefined;
565
564
  model?: string | null | undefined;
@@ -608,7 +607,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
608
607
  alt?: string | undefined;
609
608
  context?: "avatar" | "cover" | "general" | undefined;
610
609
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
611
- quality?: "high" | "low" | "standard" | undefined;
610
+ quality?: "low" | "standard" | "high" | undefined;
612
611
  createdAt?: string | undefined;
613
612
  updatedAt?: string | undefined;
614
613
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -631,7 +630,7 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
631
630
  alt?: string | undefined;
632
631
  context?: "avatar" | "cover" | "general" | undefined;
633
632
  status?: "processing" | "active" | "failed" | "deleted" | undefined;
634
- quality?: "high" | "low" | "standard" | undefined;
633
+ quality?: "low" | "standard" | "high" | undefined;
635
634
  createdAt?: string | undefined;
636
635
  updatedAt?: string | undefined;
637
636
  mediaType?: "image" | "video" | "audio" | undefined;
@@ -676,10 +675,10 @@ export declare class PageLinesSDK extends SettingsObject<PageLinesSDKSettings> {
676
675
  } | undefined>;
677
676
  getPublicAgent(args: {
678
677
  handle: string;
679
- }): Promise<Agent | undefined>;
678
+ }): Promise<AgentConfig | undefined>;
680
679
  getAgentByEmail(args: {
681
680
  email: string;
682
- }): Promise<Agent | undefined>;
681
+ }): Promise<AgentConfig | undefined>;
683
682
  generateAnonId(): string;
684
683
  track(args: Parameters<UserClient['track']>[0]): void;
685
684
  }
@@ -1,5 +1,5 @@
1
1
  import { Ref } from 'vue';
2
- import { EnrichedUser } from '@pagelines/types';
2
+ import { EnrichedUser } from '@pagelines/core';
3
3
  /**
4
4
  * SDKStorage - Handles all storage, sync, and persistence for PageLinesSDK
5
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"socialPlatforms-Ck-b3SnQ.js","sources":["../constants/socialPlatforms.ts"],"sourcesContent":["import type { SocialAccount } from '@pagelines/types'\n\n// Extract platform type from schema to ensure type safety\ntype Platform = SocialAccount['platform']\n\n// Platform metadata for URL generation and display\n// TypeScript enforces completeness - must include all platforms from schema\nexport const SOCIAL_PLATFORMS: Record<Platform, {\n label: string\n icon: string\n placeholder: string\n getUrl: (handle: string) => string\n}> = {\n linkedin: {\n label: 'LinkedIn',\n icon: 'i-simple-icons-linkedin',\n placeholder: 'john-smith',\n getUrl: (handle: string) => `https://linkedin.com/in/${handle}`,\n },\n x: {\n label: 'X',\n icon: 'i-simple-icons-x',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://x.com/${handle}`,\n },\n facebook: {\n label: 'Facebook',\n icon: 'i-simple-icons-facebook',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://facebook.com/${handle}`,\n },\n tiktok: {\n label: 'TikTok',\n icon: 'i-simple-icons-tiktok',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://tiktok.com/@${handle}`,\n },\n youtube: {\n label: 'YouTube',\n icon: 'i-tabler-brand-youtube',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://youtube.com/@${handle}`,\n },\n github: {\n label: 'GitHub',\n icon: 'i-tabler-brand-github',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://github.com/${handle}`,\n },\n instagram: {\n label: 'Instagram',\n icon: 'i-simple-icons-instagram',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://instagram.com/${handle}`,\n },\n threads: {\n label: 'Threads',\n icon: 'i-simple-icons-threads',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://threads.net/@${handle}`,\n },\n email: {\n label: 'Email',\n icon: 'i-tabler-mail',\n placeholder: 'hello@example.com',\n getUrl: (handle: string) => `mailto:${handle}`,\n },\n phone: {\n label: 'Phone',\n icon: 'i-tabler-phone',\n placeholder: '+1-555-123-4567',\n getUrl: (handle: string) => `tel:${handle.replace(/[^0-9+]/g, '')}`,\n },\n website: {\n label: 'Website',\n icon: 'i-tabler-world',\n placeholder: 'https://example.com',\n getUrl: (handle: string) => handle, // handle IS the URL\n },\n calendar: {\n label: 'Calendar',\n icon: 'i-tabler-calendar',\n placeholder: 'https://cal.com/username',\n getUrl: (handle: string) => handle, // handle IS the URL (e.g., Cal.com link)\n },\n} as const\n\nexport type SocialPlatform = keyof typeof SOCIAL_PLATFORMS\n"],"names":["SOCIAL_PLATFORMS","__name","handle"],"mappings":";;AAOO,MAAMA,IAKR;AAAA,EACH,UAAU;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAC,EAAA,CAACC,MAAmB,2BAA2BA,CAAM,IAArD;AAAA,EAAqD;AAAA,EAE/D,GAAG;AAAA,IACD,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,iBAAiBA,CAAM,IAA3C;AAAA,EAA2C;AAAA,EAErD,UAAU;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,wBAAwBA,CAAM,IAAlD;AAAA,EAAkD;AAAA,EAE5D,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,uBAAuBA,CAAM,IAAjD;AAAA,EAAiD;AAAA,EAE3D,SAAS;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,wBAAwBA,CAAM,IAAlD;AAAA,EAAkD;AAAA,EAE5D,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,sBAAsBA,CAAM,IAAhD;AAAA,EAAgD;AAAA,EAE1D,WAAW;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,yBAAyBA,CAAM,IAAnD;AAAA,EAAmD;AAAA,EAE7D,SAAS;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,wBAAwBA,CAAM,IAAlD;AAAA,EAAkD;AAAA,EAE5D,OAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,UAAUA,CAAM,IAApC;AAAA,EAAoC;AAAA,EAE9C,OAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,OAAOA,EAAO,QAAQ,YAAY,EAAE,CAAC,IAAzD;AAAA,EAAyD;AAAA,EAEnE,SAAS;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmBA,GAApB;AAAA;AAAA,EAAoB;AAAA,EAE9B,UAAU;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmBA,GAApB;AAAA;AAAA,EAAoB;AAEhC;"}
1
+ {"version":3,"file":"socialPlatforms-Ck-b3SnQ.js","sources":["../constants/socialPlatforms.ts"],"sourcesContent":["import type { SocialAccount } from '@pagelines/core'\n\n// Extract platform type from schema to ensure type safety\ntype Platform = SocialAccount['platform']\n\n// Platform metadata for URL generation and display\n// TypeScript enforces completeness - must include all platforms from schema\nexport const SOCIAL_PLATFORMS: Record<Platform, {\n label: string\n icon: string\n placeholder: string\n getUrl: (handle: string) => string\n}> = {\n linkedin: {\n label: 'LinkedIn',\n icon: 'i-simple-icons-linkedin',\n placeholder: 'john-smith',\n getUrl: (handle: string) => `https://linkedin.com/in/${handle}`,\n },\n x: {\n label: 'X',\n icon: 'i-simple-icons-x',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://x.com/${handle}`,\n },\n facebook: {\n label: 'Facebook',\n icon: 'i-simple-icons-facebook',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://facebook.com/${handle}`,\n },\n tiktok: {\n label: 'TikTok',\n icon: 'i-simple-icons-tiktok',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://tiktok.com/@${handle}`,\n },\n youtube: {\n label: 'YouTube',\n icon: 'i-tabler-brand-youtube',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://youtube.com/@${handle}`,\n },\n github: {\n label: 'GitHub',\n icon: 'i-tabler-brand-github',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://github.com/${handle}`,\n },\n instagram: {\n label: 'Instagram',\n icon: 'i-simple-icons-instagram',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://instagram.com/${handle}`,\n },\n threads: {\n label: 'Threads',\n icon: 'i-simple-icons-threads',\n placeholder: 'johnsmith',\n getUrl: (handle: string) => `https://threads.net/@${handle}`,\n },\n email: {\n label: 'Email',\n icon: 'i-tabler-mail',\n placeholder: 'hello@example.com',\n getUrl: (handle: string) => `mailto:${handle}`,\n },\n phone: {\n label: 'Phone',\n icon: 'i-tabler-phone',\n placeholder: '+1-555-123-4567',\n getUrl: (handle: string) => `tel:${handle.replace(/[^0-9+]/g, '')}`,\n },\n website: {\n label: 'Website',\n icon: 'i-tabler-world',\n placeholder: 'https://example.com',\n getUrl: (handle: string) => handle, // handle IS the URL\n },\n calendar: {\n label: 'Calendar',\n icon: 'i-tabler-calendar',\n placeholder: 'https://cal.com/username',\n getUrl: (handle: string) => handle, // handle IS the URL (e.g., Cal.com link)\n },\n} as const\n\nexport type SocialPlatform = keyof typeof SOCIAL_PLATFORMS\n"],"names":["SOCIAL_PLATFORMS","__name","handle"],"mappings":";;AAOO,MAAMA,IAKR;AAAA,EACH,UAAU;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAC,EAAA,CAACC,MAAmB,2BAA2BA,CAAM,IAArD;AAAA,EAAqD;AAAA,EAE/D,GAAG;AAAA,IACD,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,iBAAiBA,CAAM,IAA3C;AAAA,EAA2C;AAAA,EAErD,UAAU;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,wBAAwBA,CAAM,IAAlD;AAAA,EAAkD;AAAA,EAE5D,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,uBAAuBA,CAAM,IAAjD;AAAA,EAAiD;AAAA,EAE3D,SAAS;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,wBAAwBA,CAAM,IAAlD;AAAA,EAAkD;AAAA,EAE5D,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,sBAAsBA,CAAM,IAAhD;AAAA,EAAgD;AAAA,EAE1D,WAAW;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,yBAAyBA,CAAM,IAAnD;AAAA,EAAmD;AAAA,EAE7D,SAAS;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,wBAAwBA,CAAM,IAAlD;AAAA,EAAkD;AAAA,EAE5D,OAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,UAAUA,CAAM,IAApC;AAAA,EAAoC;AAAA,EAE9C,OAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmB,OAAOA,EAAO,QAAQ,YAAY,EAAE,CAAC,IAAzD;AAAA,EAAyD;AAAA,EAEnE,SAAS;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmBA,GAApB;AAAA;AAAA,EAAoB;AAAA,EAE9B,UAAU;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ,gBAAAD,EAAA,CAACC,MAAmBA,GAApB;AAAA;AAAA,EAAoB;AAEhC;"}
@@ -0,0 +1,15 @@
1
+ var g = Object.defineProperty;
2
+ var c = (n, o) => g(n, "name", { value: o, configurable: !0 });
3
+ import { ref as e } from "vue";
4
+ function b(n) {
5
+ const o = e(n.agent), i = e(n.context), r = e(n.firstMessage), u = e(n.buttonText), f = e(n.buttonIcon);
6
+ function v(t) {
7
+ t.agent !== void 0 && (o.value = t.agent), t.context !== void 0 && (i.value = t.context), t.firstMessage !== void 0 && (r.value = t.firstMessage), t.buttonText !== void 0 && (u.value = t.buttonText), t.buttonIcon !== void 0 && (f.value = t.buttonIcon);
8
+ }
9
+ return c(v, "update"), { currentAgent: o, currentContext: i, currentFirstMessage: r, currentButtonText: u, currentButtonIcon: f, update: v };
10
+ }
11
+ c(b, "useWidgetState");
12
+ export {
13
+ b as u
14
+ };
15
+ //# sourceMappingURL=useWidgetState-BGtx6NKD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWidgetState-BGtx6NKD.js","sources":["../widget/composables/useWidgetState.ts"],"sourcesContent":["import type { AgentConfig } from '../../agent/schema'\nimport type { ButtonIconPreset, WidgetUpdate } from '../PLWidget'\nimport { ref } from 'vue'\n\nexport function useWidgetState(props: {\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n buttonText?: string\n buttonIcon?: ButtonIconPreset\n}) {\n const currentAgent = ref<AgentConfig | undefined>(props.agent)\n const currentContext = ref<string | undefined>(props.context)\n const currentFirstMessage = ref<string | undefined>(props.firstMessage)\n const currentButtonText = ref<string | undefined>(props.buttonText)\n const currentButtonIcon = ref<ButtonIconPreset | undefined>(props.buttonIcon)\n\n function update(updates: WidgetUpdate) {\n if (updates.agent !== undefined)\n currentAgent.value = updates.agent\n if (updates.context !== undefined)\n currentContext.value = updates.context\n if (updates.firstMessage !== undefined)\n currentFirstMessage.value = updates.firstMessage\n if (updates.buttonText !== undefined)\n currentButtonText.value = updates.buttonText\n if (updates.buttonIcon !== undefined)\n currentButtonIcon.value = updates.buttonIcon\n }\n\n return { currentAgent, currentContext, currentFirstMessage, currentButtonText, currentButtonIcon, update }\n}\n"],"names":["useWidgetState","props","currentAgent","ref","currentContext","currentFirstMessage","currentButtonText","currentButtonIcon","update","updates","__name"],"mappings":";;;AAIO,SAASA,EAAeC,GAM5B;AACD,QAAMC,IAAeC,EAA6BF,EAAM,KAAK,GACvDG,IAAiBD,EAAwBF,EAAM,OAAO,GACtDI,IAAsBF,EAAwBF,EAAM,YAAY,GAChEK,IAAoBH,EAAwBF,EAAM,UAAU,GAC5DM,IAAoBJ,EAAkCF,EAAM,UAAU;AAE5E,WAASO,EAAOC,GAAuB;AACrC,IAAIA,EAAQ,UAAU,WACpBP,EAAa,QAAQO,EAAQ,QAC3BA,EAAQ,YAAY,WACtBL,EAAe,QAAQK,EAAQ,UAC7BA,EAAQ,iBAAiB,WAC3BJ,EAAoB,QAAQI,EAAQ,eAClCA,EAAQ,eAAe,WACzBH,EAAkB,QAAQG,EAAQ,aAChCA,EAAQ,eAAe,WACzBF,EAAkB,QAAQE,EAAQ;AAAA,EACtC;AAXS,SAAAC,EAAAF,GAAA,WAaF,EAAE,cAAAN,GAAc,gBAAAE,GAAgB,qBAAAC,GAAqB,mBAAAC,GAAmB,mBAAAC,GAAmB,QAAAC,EAAA;AACpG;AA3BgBE,EAAAV,GAAA;"}
@@ -1,11 +1,11 @@
1
- import { Agent } from '@pagelines/types';
1
+ import { AgentConfig } from '@pagelines/core';
2
2
  export type WidgetMode = 'inline' | 'button' | 'popup' | 'modal';
3
3
  export type ButtonIconPreset = 'phone' | 'calendar' | 'question' | 'message' | 'sparkles';
4
4
  export interface WidgetConfig {
5
5
  el?: HTMLElement;
6
6
  mode: WidgetMode;
7
7
  handle?: string;
8
- agent?: Agent;
8
+ agent?: AgentConfig;
9
9
  context?: string;
10
10
  firstMessage?: string;
11
11
  buttonText?: string;
@@ -16,7 +16,7 @@ export interface WidgetConfig {
16
16
  onClose?: () => void;
17
17
  }
18
18
  export interface WidgetUpdate {
19
- agent?: Agent;
19
+ agent?: AgentConfig;
20
20
  context?: string;
21
21
  firstMessage?: string;
22
22
  buttonText?: string;
@@ -1,10 +1,10 @@
1
1
  import { MaybeRef } from 'vue';
2
- import { Agent } from '@pagelines/types';
2
+ import { AgentConfig } from '@pagelines/core';
3
3
  import { WidgetConfig, WidgetUpdate, PLWidget } from '../PLWidget';
4
4
  export interface UsePLWidgetConfig {
5
5
  mode: WidgetConfig['mode'];
6
6
  handle?: MaybeRef<string | undefined>;
7
- agent?: MaybeRef<Agent | null | undefined>;
7
+ agent?: MaybeRef<AgentConfig | null | undefined>;
8
8
  context?: MaybeRef<string | undefined>;
9
9
  firstMessage?: MaybeRef<string | undefined>;
10
10
  apiBase?: string;