@customer-agent/sdk 0.5.9 → 0.6.0-test.67b72921d3c0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chunks/{App-8CX3o_mN.js → App-B4dn3hns.js} +2 -2
- package/chunks/InterviewChatScreen-D37bCE1R.js +2 -0
- package/chunks/{Panel-DJKqAgzv.js → Panel-XDrfFRK4.js} +3 -3
- package/chunks/{WidgetComposer-BtlsItsm.js → WidgetComposer-C_Y7bwhP.js} +2 -2
- package/chunks/constants-Do-S47mc.js +1 -0
- package/chunks/{controller-DaVQNceG.js → controller-DsoiXsWM.js} +1 -1
- package/chunks/routes-Dh46ka4-.js +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/react.js +1 -1
- package/runtime.es.js +1 -1
- package/sdk.js +1 -1
- package/types/sdk/public-types.d.ts +2 -1
- package/types/types.d.ts +4 -0
- package/types/ui/screens/interview/InterviewChatScreen.d.ts +2 -1
- package/chunks/InterviewChatScreen-C_GJHiUj.js +0 -2
- package/chunks/constants-ip01F3Ef.js +0 -1
- package/chunks/routes-aV4LZuEj.js +0 -1
package/runtime.es.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,t}from"./chunks/constants-ip01F3Ef.js";import{r as n,t as r}from"./chunks/interviewTypes-Ch2NsXKB.js";import{i,t as a}from"./chunks/launcherAnchorStore-JMTZZGKC.js";import{_ as o,b as s,f as c,g as l,m as u,n as d,p as f,u as p,v as m,y as h}from"./chunks/routes-aV4LZuEj.js";import{a as g,c as _,d as v,i as y,l as b,n as x,o as S,r as ee,u as te}from"./chunks/navigationState-LdqG_Osx.js";import{n as ne,r as re}from"./chunks/i18n-Q8u2wtW4.js";var C=Object.create,w=Object.defineProperty,T=Object.getOwnPropertyDescriptor,ie=Object.getOwnPropertyNames,E=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty,O=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),k=(e,t)=>{let n={};for(var r in e)w(n,r,{get:e[r],enumerable:!0});return t||w(n,Symbol.toStringTag,{value:`Module`}),n},ae=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=ie(t),a=0,o=i.length,s;a<o;a++)s=i[a],!D.call(e,s)&&s!==n&&w(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=T(t,s))||r.enumerable});return e},A=(e,t,n)=>(n=e==null?{}:C(E(e)),ae(t||!e||!e.__esModule?w(n,`default`,{value:e,enumerable:!0}):n,e));function oe(){let e=s(m());return{async checkEligibility(t,n){let{data:r}=await e.request(`/interviews/eligibility`,{body:t,method:`POST`,signal:n?.signal});return r},async chooseInvitation(t,n){await e.request(`/interviews/invitations/${t}/choice`,{body:n,method:`PATCH`})},async createInvitation(t){let{data:n}=await e.request(`/interviews/invitations`,{body:t,method:`POST`});return n},async getReward(t){let{data:n}=await e.request(`/interviews/sessions/${t}/reward`);return n},async getSession(t,n){let{data:r}=await e.request(`/interviews/sessions/${t}`,{signal:n?.signal});return r},async sendMessage(t,n){let{data:r}=await e.request(`/interviews/sessions/${t}/messages`,{body:n,method:`POST`});return r},async startInvitation(t,n){let{data:r}=await e.request(`/interviews/invitations/${t}/start`,{body:n,method:`POST`});return r}}}function j(e){return typeof e==`string`&&e.trim()?e.trim():null}function M(e){return e.anonymous_id??e.user?.id}function N(e){return{...e.context,...e.user,userId:e.user?.id,visitorId:M(e)}}function P(e){return j(e.brand?.name)??`Customer Agent`}function F(e){return{appId:e.app_id,locale:e.locale,pageContext:e.context??{},userContext:N(e),visitorId:M(e)}}function se(e,t){return{appId:e.app_id,campaignId:t.campaignId,context:e.context??{},showRequestId:t.showRequestId,userContext:N(e),variantKey:t.variantKey,visitorId:M(e)}}function I(e){return e instanceof Error?e.message:`CustomerAgent interview request failed.`}function L(e,t){return JSON.stringify(e)===JSON.stringify(t)}function R(e,t){return e.status===n.ACTIVE?{entryId:`interview/session/${e.sessionId}`,sessionId:e.sessionId,status:r.ACTIVE,title:t}:{sessionId:e.sessionId,sessionStatus:e.status,status:r.TERMINAL}}function ce(e){return{conversationId:`interview/session/${e}`,conversationType:`interview`,entryId:`interview/session/${e}`,interviewSessionId:e}}function z(e){return typeof crypto<`u`&&`randomUUID`in crypto?`${e}-${crypto.randomUUID()}`:`${e}-${Date.now()}-${Math.random().toString(36).slice(2)}`}function le({api:e,buildContextPayload:t=p,cache:i,emitAvailable:a,emitConversationCreated:o,emitSessionStarted:s,emitStateChanged:c,getOptions:l}){let d=new Set,f={status:r.IDLE},m=0,h=null,g=null,_=null,v=null,y=null,b=null,x=null;function S(e){L(f,e)||(f=e,c(f))}function ee(e,t){y=t,b=null,x=null;let n={body:t.invitation.body,campaignId:t.campaignId,laterCta:t.invitation.laterCta,startCta:t.invitation.startCta,status:r.AVAILABLE,title:t.invitation.title};S(n),d.has(e)||(d.add(e),a(n))}function te(){y=null,b=null,x=null,S({status:r.IDLE})}function ne(){v?.abort(),v=null,g=null,_=null}async function re(t,n,i){let a=l(),o=await e.checkEligibility(F(a),{signal:i});if(!(n!==m||t!==u(l()))){if(h=t,!o.eligible||o.status&&o.status!==r.AVAILABLE||!o.campaignId||!o.showRequestId||!o.invitation){y=null,b=null,x=null,S({status:r.UNAVAILABLE});return}ee(t,o)}}async function C(){let t=l(),a=u(t);if(!a){m+=1,ne(),h=null,te();return}let o=g!==null&&_!==a;if(o&&ne(),!o&&h===a&&f.status!==r.ERROR)return;if(g&&_===a){await g;return}ne();let s=++m,c=new AbortController;v=c,_=a,g=(async()=>{S({status:r.CHECKING});try{let r=i.read(t);if(r)try{let t=await e.getSession(r.sessionId,{signal:c.signal});if(s!==m||a!==u(l()))return;if(t.status!==n.ACTIVE){x=null,i.clear(l()),await re(a,s,c.signal);return}x=t,S(R(t,r.title)),h=a;return}catch{if(s!==m||a!==u(l()))return;x=null,i.clear(l())}await re(a,s,c.signal)}catch(e){if(s!==m||a!==u(l()))return;x=null,S({error:{message:I(e)},status:r.ERROR})}finally{_===a&&(g=null,_=null),v===c&&(v=null)}})(),await g}return{async chooseInvitation(t,n){await e.chooseInvitation(t,{choice:n})},async ensureInvitation(){let t=u(l());if(!t)throw m+=1,ne(),h=null,te(),Error(`No interview invitation is available.`);if((!y||f.status!==r.AVAILABLE)&&await C(),!y||f.status!==r.AVAILABLE)throw Error(`No interview invitation is available.`);if(b)return b;let n=await e.createInvitation(se(l(),y));return t===u(l())&&(b=n.invitationId),n.invitationId},getState(){return f.status===r.ACTIVE?{...f,title:j(l().brand?.name)??f.title??P(l())}:f},getActiveSession(){return x},async loadReward(t=x?.sessionId){if(!t)throw Error(`Cannot load an interview reward before the session starts.`);return await e.getReward(t)},syncAvailability:C,async startInvitation(r){let a=l(),c=u(a),d=await e.startInvitation(r,t(a));if(!c||c!==u(l()))return{entryId:`interview/session/${d.sessionId}`,session:d,sessionId:d.sessionId};x=d,d.status===n.ACTIVE?i.write(a,{entryId:`interview/session/${d.sessionId}`,priority:20,sessionId:d.sessionId,title:P(a)}):i.clear(a),S(R(d,P(a)));let f=ce(d.sessionId);return o?.(f),s?.(f),{entryId:`interview/session/${d.sessionId}`,session:d,sessionId:d.sessionId}},async sendMessage(t){if(!x||f.status!==r.ACTIVE)throw Error(`Cannot send an interview message before the session starts.`);let a=u(l()),o=x.sessionId,s=await e.sendMessage(o,{clientMessageId:z(`interview-message`),content:t,locale:l().locale});a!==u(l())||f.status!==r.ACTIVE||(x={...x,messages:[...x.messages,{content:t,createdAt:new Date().toISOString(),id:z(`interview-user`),role:`user`},{content:s.assistantMessage,createdAt:new Date().toISOString(),id:z(`interview-assistant`),role:`assistant`}],status:s.sessionStatus},s.sessionStatus!==n.ACTIVE&&i.clear(l()),S(R(x,P(l()))))}}}function ue(e){let t=s(e);return{async startSession(e,n){let{data:r}=await t.request(`/session`,{body:{...e,conversationId:n??void 0},conversationId:n,method:`POST`});return{conversationId:r.conversationId,messages:r.messages}},async updateContext(e,n){let{data:r}=await t.request(`/context`,{body:e,conversationId:n,method:`PATCH`});return r}}}function B(e){return e instanceof Error?e.message:`CustomerAgent support session request failed.`}function de(e){return e instanceof h&&e.code===`NOT_FOUND`}function V(e,t){return JSON.stringify(e)===JSON.stringify(t)}function H(e){return Array.isArray(e)?`[${e.map(e=>H(e)).join(`,`)}]`:e&&typeof e==`object`?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${H(t)}`).join(`,`)}}`:JSON.stringify(e)}function fe({api:e,buildContextPayload:t=p,cache:n,emitConversationCreated:r,emitStateChanged:i,getOptions:a,onSessionReady:o}){let s={status:b.IDLE},c=0,l=null,u=null,d=null,f=null,m=null,h=null,g=null,_=null;function y(e){V(s,e)||(s=e,i(s))}async function x(n){let r=t(a());return await e.startSession(r,n)}async function S(n,r,i){if(!e.updateContext)return;let o={...t(n),conversationId:i},s=H({key:r,payload:o});_!==s&&await e.updateContext(o,i).then(()=>{r===v(a())&&(_=s)}).catch(()=>void 0)}return{async ensureSession(){let e=a(),t=v(e);if(s.status===b.READY&&u===t)return l??{conversationId:s.conversationId,messages:[]};if(m&&h===t){let e=await m;if(e)return e}if(d&&f===t)return await d;let i=n.read(e),p=++c;y({status:i?b.REFRESHING:b.STARTING}),f=t,d=(async()=>{try{return await x(i)}catch(t){if(!i||!de(t))throw t;return n.clear(e),await x(null)}})();try{let e=await d;return p!==c||t!==v(a())?e:(l=e,u=t,n.write(a(),e.conversationId),o?.(a(),e),(!i||i!==e.conversationId)&&r(e.conversationId),y({conversationId:e.conversationId,status:b.READY}),e)}catch(r){throw p!==c||t!==v(a())?r:(i&&n.clear(e),y({error:{message:B(r)},status:b.ERROR}),r)}finally{f===t&&(d=null,f=null)}},getState(){return s},getSessionSnapshot(){return u===v(a())?l:null},invalidateSession(){let e=a(),t=v(e);c+=1,n.clear(e),u===t&&(l=null,u=null),f===t&&(d=null,f=null),h===t&&(m=null,h=null),g=null,_=null,y({status:b.IDLE})},async syncCachedSession(){let r=a(),i=v(r);if(s.status===b.READY&&u===i){g=i,await S(r,i,s.conversationId);return}if(g===i&&s.status!==b.ERROR)return;if(m&&h===i){await m;return}if(d&&f===i)return;let p=n.read(r);if(!p){g=i,y({status:b.IDLE});return}let _=++c;h=i,m=(async()=>{y({status:b.REFRESHING});try{let s=await e.startSession(t(r),p);return _!==c||i!==v(a())?null:(l=s,u=i,n.write(a(),s.conversationId),o?.(a(),s),y({conversationId:s.conversationId,status:b.READY}),g=i,await S(a(),i,s.conversationId),s)}catch(e){return _!==c||i!==v(a())?null:(n.clear(a()),de(e)?(u===i&&(l=null,u=null),y({status:b.IDLE}),g=i,null):(y({error:{message:B(e)},status:b.ERROR}),null))}finally{h===i&&(m=null,h=null)}})(),await m}}}function pe(e){let t=new EventTarget;return{emit(...n){let[r,i={}]=n,a={...e(),...i,timestamp:new Date().toISOString(),type:r};t.dispatchEvent(new CustomEvent(r,{detail:a}))},on(e,n){let r=e=>n(e.detail);return t.addEventListener(e,r),()=>t.removeEventListener(e,r)}}}function U(e){let t=e.tagName.toLowerCase();return t===`button`||t===`input`||t===`select`||t===`textarea`||t===`summary`||t===`a`&&e.hasAttribute(`href`)}function me(e,t,n){if(n===void 0){delete e[t];return}e[t]=n}function he(e,t){let n=t.isOpen?`open`:`closed`;e.setAttribute(`aria-expanded`,t.isOpen?`true`:`false`),e.dataset.state=n,e.dataset.customerAgentState=n,me(e.dataset,`customerAgentActiveEntry`,t.activeEntryId),me(e.dataset,`customerAgentActiveKind`,t.activeKind),e.dataset.customerAgentHasInvitation=t.hasInvitation?`true`:`false`,e.dataset.customerAgentHasUnread=t.hasUnread?`true`:`false`,me(e.dataset,`customerAgentViewport`,t.viewport),delete e.dataset.customerAgentLauncher,U(e)||(e.setAttribute(`role`,`button`),e.hasAttribute(`tabindex`)||(e.tabIndex=0))}function ge(){let e=document.createElement(`div`);e.style.cssText=[`position: fixed`,`visibility: hidden`,`height: env(safe-area-inset-bottom)`,`pointer-events: none`].join(`;`),document.body.appendChild(e);let t=Number.parseFloat(getComputedStyle(e).height)||0;return e.remove(),t}function _e(e={}){let t=window.visualViewport,n=window.innerWidth,r=window.innerHeight,i=t?.height??r,a=e.mode!==`auto`&&e.mode!==void 0?!0:n<=640,o=a?e.mode===`bottom-sheet`?`bottom-sheet`:`fullscreen`:`desktop`,s=Math.max(0,t?.offsetTop??0);return{height:r,isMobile:a,keyboardInset:Math.max(0,r-i-s),mode:a?`mobile`:`desktop`,offsetTop:s,presentation:o,safeAreaBottom:ge(),visualHeight:i,width:n}}e();var W=null,G=null,K=null,ve=null,ye=`customer-agent-widget`,be=260,xe=[],Se=new WeakMap,Ce=0;async function we(){return K||(ve??=Promise.all([import(`./chunks/react-CKmEJ8Ba.js`).then(e=>A(e.t(),1)),import(`./chunks/client-duvjg9sB.js`).then(e=>A(e.t(),1)),import(`./chunks/App-8CX3o_mN.js`)]).then(([e,t,n])=>(K={createElement:e.createElement,createRoot:t.createRoot,preloadWidgetPanelShell:n.preloadWidgetPanelShell,WidgetApp:n.WidgetApp},K)).catch(e=>{throw ve=null,e}),await ve)}function Te(e){let t=xe.splice(0);for(let n of t)n.active&&(n.unsubscribe=e.on(n.eventName,n.handler))}function Ee(){document.getElementById(ye)?.remove()}function De(e){return typeof e==`string`?document.querySelector(e)??document.body:e??document.body}function Oe(e){let t=Se.get(e);if(t)return t;let n=`element-${++Ce}`;return Se.set(e,n),n}function ke(e){return typeof e==`string`?document.querySelector(e):e??null}function Ae(e){return Object.prototype.toString.call(e)===`[object Object]`}function q(e){return Array.isArray(e)?`[${e.map(e=>q(e)).join(`,`)}]`:e&&typeof e==`object`?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${q(t)}`).join(`,`)}}`:JSON.stringify(e)}function je(e){return typeof e==`string`?`selector:${e}`:e?`element:${Oe(e)}`:null}function Me(e){let t=Oe(De(e.mount)),{launcher:n,mount:r,...i}=e;return{fingerprint:q({...i,launcher:n?{...n,target:je(n.target)}:void 0,mount:t}),key:q({appId:e.app_id,mount:t})}}function Ne(e,t){let n={...e};for(let[r,i]of Object.entries(t)){let t=e[r];n[r]=Ae(t)&&Ae(i)?Ne(t,i):i}return n}function J(e){return typeof e==`string`&&e.trim()?e.trim():null}function Pe(e,t){let n=t?.replace(`_`,`-`),r=n?.split(`-`)[0];return(n?e[n]:void 0)??(r?e[r]:void 0)??e.en??Object.values(e)[0]}function Fe(e,t){let n=J(t.branding.name)??J(t.branding.agentName)??J(t.branding.workspaceName),r=J(t.branding.primaryColor)??J(t.branding.primary_color),i=Pe(t.welcomeMessage,e.locale);return{...e,brand:{...e.brand,name:e.brand?.name??n??e.brand?.name},messages:{...i?{welcome_message:i}:{},...e.messages},theme:{...e.theme,primaryColor:e.theme?.primaryColor??r??e.theme?.primaryColor}}}function Ie(e,n=Me(e)){W?.shutdown(),Ee();let r=l(),u=document.createElement(`div`),p=pe(()=>({appId:b.app_id,widgetId:r})),v=De(e.mount),b=o(e,r),C=e.launcher?.target,w=!!b.open_on_init,T=y(b),ie=w,E=null,D=null,O=null,k=null,ae=null,A=null,j=null,M=null,N=re(b.locale,b.messages),P=_e(b.mobile),F=!1,se=0,I=null,L=`idle`,R=null,ce=!1,z=!1,B=!1,de=null,V=fe({api:ue(m()),cache:te(),emitConversationCreated(e){p.emit(t.CONVERSATION_CREATED,{...Ke(e)})},emitStateChanged(e){p.emit(t.SUPPORT_STATE_CHANGED,{support:e}),U(),J()},getOptions(){return b},onSessionReady(e,t){c.hydrateSession(e,t)}}),H=le({api:oe(),cache:f(),emitAvailable(e){p.emit(t.INTERVIEW_AVAILABLE,e)},emitConversationCreated(e){p.emit(t.CONVERSATION_CREATED,e)},emitSessionStarted(e){p.emit(t.INTERVIEW_SESSION_STARTED,e)},emitStateChanged(e){p.emit(t.INTERVIEW_STATE_CHANGED,{interview:e}),U(),J()},getOptions(){return b}});u.id=ye,u.className=`customer-agent-namespace`,u.dataset.customerAgent=`container`,v.appendChild(u);function U(){if(!E)return;let e=g(T.memoryRoute),t=T.requestedTarget?.type===`entry`?e?.split(`/`)[0]:T.requestedTarget?.type??e?.split(`/`)[0]??`support`;he(E,{activeEntryId:e,activeKind:t,hasInvitation:!1,hasUnread:!1,isOpen:w,targetConfigured:C!==void 0,targetConnected:!!E,viewport:P.mode})}function me(){!E||!D||(D.ariaExpanded===null?E.removeAttribute(`aria-expanded`):E.setAttribute(`aria-expanded`,D.ariaExpanded),D.role===null?E.removeAttribute(`role`):E.setAttribute(`role`,D.role),D.state===null?delete E.dataset.state:E.dataset.state=D.state,D.tabIndex===null?E.removeAttribute(`tabindex`):E.setAttribute(`tabindex`,D.tabIndex))}function ge(){ae?.(),ae=null,a(E),me(),E=null,D=null}function ve(){typeof C!=`string`||O!==null||(O=window.requestAnimationFrame(()=>{if(O=null,!(F||typeof C!=`string`)){if(ke(C)===E){U();return}J()}}))}function xe(){if(k?.disconnect(),k=null,typeof C!=`string`||typeof MutationObserver>`u`)return;let e=document.documentElement??document.body;e&&(k=new MutationObserver(ve),k.observe(e,{attributes:!0,childList:!0,subtree:!0}))}function Se(){let e=ke(C);if(e===E){U();return}if(ge(),!e)return;let t=e;E=t,i(t),D={ariaExpanded:t.getAttribute(`aria-expanded`),role:t.getAttribute(`role`),state:t.dataset.state??null,tabIndex:t.getAttribute(`tabindex`)};function n(e){e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation()}function r(e){n(e),Q(!w)}function a(e){e.key!==`Enter`&&e.key!==` `||(n(e),Q(!w))}t.addEventListener(`click`,r,{capture:!0}),t.addEventListener(`keydown`,a,{capture:!0}),ae=()=>{t.removeEventListener(`click`,r,{capture:!0}),t.removeEventListener(`keydown`,a,{capture:!0})},U()}function Ce(){L===`idle`&&(L=`queued`,queueMicrotask(()=>{F||(L=`emitted`,p.emit(t.WIDGET_READY))}))}function Oe(e){let n=!0;return queueMicrotask(()=>{F||!n||e({appId:b.app_id,timestamp:new Date().toISOString(),type:t.WIDGET_READY,widgetId:r})}),()=>{n=!1}}function Ae(e){let n=e instanceof Error?e.message:`CustomerAgent widget UI failed to load.`;console.error(`CustomerAgent widget UI failed to load.`,e),p.emit(t.ERROR,{message:n})}function q(){return R??=we().then(async e=>{F||(I??=e.createRoot(u),await e.preloadWidgetPanelShell())}).catch(e=>{throw R=null,e}),R}function je(){if(!F){if(!E||ie||w){J();return}if(!K||!I){J();return}I.render(K.createElement(K.WidgetApp,{activeTarget:T.requestedTarget,hasPanel:!1,hasCustomLauncher:!0,eventBus:p,interviewRuntime:{chooseInvitation:H.chooseInvitation,ensureInvitation:H.ensureInvitation,getActiveSession:H.getActiveSession,startInvitation:H.startInvitation},isOpen:!1,launcherTargetElement:E,memoryRoute:T.memoryRoute,onMemoryRouteChange:Ye,onOpenChange:Q,options:b,resolvedLocale:N,runtimeState:{interview:H.getState(),support:V.getState()},supportRuntime:{ensureSession:V.ensureSession,getSessionSnapshot:V.getSessionSnapshot,invalidateSession:V.invalidateSession},isViewportSettling:B,viewport:P,widgetId:r})),Ce()}}function J(){if(!F){if(Se(),E&&!ie&&!w){ce=!1,q().then(je).catch(Ae);return}if(!K||!I){ce=!0,we().then(e=>{F||(I??=e.createRoot(u),ce&&(ce=!1,J()))}).catch(e=>{Ae(e)});return}I.render(K.createElement(K.WidgetApp,{activeTarget:T.requestedTarget,hasPanel:ie,hasCustomLauncher:!!E,eventBus:p,interviewRuntime:{chooseInvitation:H.chooseInvitation,ensureInvitation:H.ensureInvitation,getActiveSession:H.getActiveSession,startInvitation:H.startInvitation},isOpen:w,launcherTargetElement:E,memoryRoute:T.memoryRoute,onMemoryRouteChange:Ye,onOpenChange:Q,options:b,resolvedLocale:N,runtimeState:{interview:H.getState(),support:V.getState()},supportRuntime:{ensureSession:V.ensureSession,getSessionSnapshot:V.getSessionSnapshot,invalidateSession:V.invalidateSession},isViewportSettling:B,viewport:P,widgetId:r})),q().then(Ce).catch(Ae)}}function Pe(){let e=++se;N=re(b.locale,b.messages),ne(b.locale,b.messages).then(t=>{F||e!==se||(N=t,J())}).catch(n=>{if(F||e!==se)return;let r=n instanceof Error?n.message:`CustomerAgent locale messages failed to load.`;console.error(`CustomerAgent locale messages failed to load.`,n),p.emit(t.ERROR,{message:r})})}function Ie(){N=re(b.locale,b.messages),P=_e(b.mobile),X()}function Le(e){S(e)!==S(b)&&(T=y(b))}function Y(){P=_e(b.mobile),X()}function Re(){return w&&!b.embedded&&P.presentation===`fullscreen`}function ze(){let e=window.navigator.platform,t=window.navigator.maxTouchPoints??0;return/iP(ad|hone|od)/.test(e)||e===`MacIntel`&&t>1}function Be(){if(de)return;let e=document.body,t=document.documentElement,n=window.scrollX,r=window.scrollY,i=ze()?`fixed`:`overflow`,a=Math.max(0,window.innerWidth-t.clientWidth),o=Number.parseFloat(window.getComputedStyle(e).paddingRight)||0;de={bodyLeft:e.style.left,bodyOverflow:e.style.overflow,bodyOverscrollBehavior:e.style.overscrollBehavior,bodyPaddingRight:e.style.paddingRight,bodyPosition:e.style.position,bodyRight:e.style.right,bodyTop:e.style.top,bodyWidth:e.style.width,htmlOverflow:t.style.overflow,htmlOverscrollBehavior:t.style.overscrollBehavior,htmlScrollbarGutter:t.style.scrollbarGutter,scrollX:n,scrollY:r,strategy:i},t.style.overflow=`hidden`,t.style.overscrollBehavior=`contain`,e.style.overflow=`hidden`,e.style.overscrollBehavior=`contain`,`scrollbarGutter`in t.style?t.style.scrollbarGutter=`stable`:a>0&&(e.style.paddingRight=`${o+a}px`),i===`fixed`&&(e.style.left=`-${n}px`,e.style.position=`fixed`,e.style.right=`0`,e.style.top=`-${r}px`,e.style.width=`100%`)}function Ve(){let e=de;if(!e)return;de=null;let t=document.body,n=document.documentElement;n.style.overflow=e.htmlOverflow,n.style.overscrollBehavior=e.htmlOverscrollBehavior,n.style.scrollbarGutter=e.htmlScrollbarGutter,t.style.left=e.bodyLeft,t.style.overflow=e.bodyOverflow,t.style.overscrollBehavior=e.bodyOverscrollBehavior,t.style.paddingRight=e.bodyPaddingRight,t.style.position=e.bodyPosition,t.style.right=e.bodyRight,t.style.top=e.bodyTop,t.style.width=e.bodyWidth,e.strategy===`fixed`&&window.scrollTo(e.scrollX,e.scrollY)}function X(){if(Re()){Be();return}Ve()}function He(e){return w&&!b.embedded&&e.presentation===`fullscreen`}function Ue(){j!==null&&(window.clearTimeout(j),j=null),B&&(B=!1,J())}function We(){j!==null&&window.clearTimeout(j),j=window.setTimeout(()=>{j=null,!F&&Ue()},be)}function Z(){A===null&&(A=window.requestAnimationFrame(()=>{if(A=null,F)return;let e=_e(b.mobile),t=He(e);P=e,X(),t?(B=!0,We()):(j!==null&&(window.clearTimeout(j),j=null),B=!1),J()}))}function Ge(){z||(z=!0,queueMicrotask(()=>{z=!1,!F&&(Je(),V.syncCachedSession(),H.syncAvailability())}))}function Ke(e){return{conversationId:e,conversationType:`support`,entryId:d(e),supportConversationId:e}}function qe(){return{activeEntryId:g(T.memoryRoute),activeTarget:T.requestedTarget,appId:b.app_id,isOpen:w,isReady:L===`emitted`,launcher:{targetConfigured:C!==void 0,targetConnected:!!E},support:V.getState(),interview:H.getState(),widgetId:r}}function Je(){let e=m(),n=`${e}::${b.app_id}`;M!==n&&(M=n,s(e).request(`/apps/${b.app_id}/public-config`).then(({data:e})=>{M===n&&(b=Fe(b,e),Pe(),Y(),J())}).catch(e=>{if(e instanceof h&&e.code===`NOT_FOUND`)return;let n=e instanceof Error?e.message:`CustomerAgent public config request failed.`;console.error(`CustomerAgent public config request failed.`,e),p.emit(t.ERROR,{message:n})}))}window.addEventListener(`resize`,Z),window.addEventListener(`orientationchange`,Z),window.visualViewport?.addEventListener(`resize`,Z),window.visualViewport?.addEventListener(`scroll`,Z);function Q(e){if(e?ie=!0:T=x(T),w===e){J();return}w=e,X(),U(),J(),p.emit(w?t.WIDGET_OPENED:t.WIDGET_CLOSED)}function $(e){T=_(b,T,e)}function Ye(e){T=ee(b,T,e),U()}let Xe={async chooseInvitation(e,t){await H.chooseInvitation(e,t)},async ensureInvitation(){return{invitationId:await H.ensureInvitation()}},hide(){Q(!1)},getInterviewState(){return H.getState()},getInterviewSession(){return H.getActiveSession()},async getSession(){return{conversationId:(await V.ensureSession()).conversationId}},getState:qe,getSupportState(){return V.getState()},identify(e){let t=b;b={...b,user:e},Le(t),Ie(),J(),Ge()},on(e,n){let r=p.on(e,n),i;return e===t.WIDGET_READY&&L===`emitted`&&(i=Oe(n)),()=>{i?.(),r()}},openEntry(e){$({entryId:e,type:`entry`}),Q(!0)},async loadInterviewReward(e){return await H.loadReward(e)},async sendInterviewMessage(e){await H.sendMessage(e)},setContext(e,t={}){b={...b,context:t.merge===!1?e:Ne(b.context,e),context_ready:t.ready??b.context_ready},Ie(),J(),Ge()},show(e){$(e),Q(!0)},shutdown(){F=!0,W===Xe&&(W=null,G=null),I?.unmount(),window.removeEventListener(`resize`,Z),window.removeEventListener(`orientationchange`,Z),window.visualViewport?.removeEventListener(`resize`,Z),window.visualViewport?.removeEventListener(`scroll`,Z),A!==null&&(window.cancelAnimationFrame(A),A=null),j!==null&&(window.clearTimeout(j),j=null),Ve(),k?.disconnect(),k=null,O!==null&&(window.cancelAnimationFrame(O),O=null),ge(),u.remove()},async startInvitation(e){let t=await H.startInvitation(e);return $({sessionId:t.sessionId,type:`interview`}),J(),{entryId:t.entryId,sessionId:t.sessionId}},async startInterview(){$({type:`interview`}),Q(!0);try{let e=await H.ensureInvitation(),t=await H.startInvitation(e);return $({sessionId:t.sessionId,type:`interview`}),J(),{entryId:t.entryId,sessionId:t.sessionId}}catch(e){throw $({type:`support`}),J(),e}},toggle(e){e&&$(e),Q(!w)},update(e){let t=b;Object.prototype.hasOwnProperty.call(e,`launcher`)&&(C=e.launcher?.target,xe()),b={...o({...b,...e,context:e.context??b.context},b.widgetId),embedded:b.embedded},Le(t),Pe(),Y(),J(),Ge()}};return W=Xe,G=n,Te(p),xe(),Pe(),X(),J(),Ge(),Xe}function Le(e){if(W&&e.app_id){let t=Me(e);return G?.key===t.key?(G.fingerprint!==t.fingerprint&&(W.update(e),G=t),e.open_on_init&&W.show(),W):Ie(e,t)}return Ie(e)}var Y={boot:Le,async chooseInvitation(e,t){await W?.chooseInvitation(e,t)},async ensureInvitation(){return W?await W.ensureInvitation():null},getInterviewState(){return W?.getInterviewState()??null},getInterviewSession(){return W?.getInterviewSession()??null},async getSession(){return W?await W.getSession():null},getState(){return W?.getState()??null},getSupportState(){return W?.getSupportState()??null},hide(){W?.hide()},identify(e){W?.identify(e)},on(e,t){if(W)return W.on(e,t);let n={active:!0,eventName:e,handler:t};return xe.push(n),()=>{n.active=!1,n.unsubscribe?.()}},setContext(e,t){W?.setContext(e,t)},openEntry(e){W?.openEntry(e)},async loadInterviewReward(e){return W?await W.loadInterviewReward(e):null},async sendInterviewMessage(e){await W?.sendInterviewMessage(e)},show(e){W?.show(e)},shutdown(){W?.shutdown(),W=null,G=null},async startInvitation(e){return W?await W.startInvitation(e):null},async startInterview(){return W?await W.startInterview():null},toggle(e){W?.toggle(e)},update(e){W?.update(e)}};function Re(e,...t){switch(e){case`boot`:return Y.boot(t[0]);case`chooseInvitation`:return Y.chooseInvitation(t[0],t[1]);case`ensureInvitation`:return Y.ensureInvitation();case`getSession`:return Y.getSession();case`getState`:return Y.getState();case`getSupportState`:return Y.getSupportState();case`getInterviewState`:return Y.getInterviewState();case`getInterviewSession`:return Y.getInterviewSession();case`hide`:return Y.hide();case`identify`:return Y.identify(t[0]);case`on`:return Y.on(t[0],t[1]);case`openEntry`:return Y.openEntry(t[0]);case`loadInterviewReward`:return Y.loadInterviewReward(t[0]);case`sendInterviewMessage`:return Y.sendInterviewMessage(t[0]);case`setContext`:return Y.setContext(t[0],t[1]);case`show`:return Y.show(t[0]);case`shutdown`:return Y.shutdown();case`startInvitation`:return Y.startInvitation(t[0]);case`startInterview`:return Y.startInterview();case`toggle`:return Y.toggle(t[0]);case`update`:return Y.update(t[0]);default:throw Error(`CustomerAgent received an unknown command: ${String(e)}.`)}}var ze=Object.assign(Re,Y),Be=Y.chooseInvitation,Ve=Y.ensureInvitation,X=Y.getInterviewState,He=Y.getInterviewSession,Ue=Y.getSession,We=Y.getState,Z=Y.getSupportState,Ge=Y.hide,Ke=Y.identify,qe=Y.on,Je=Y.openEntry,Q=Y.loadInterviewReward,$=Y.sendInterviewMessage,Ye=Y.setContext,Xe=Y.show,Ze=Y.shutdown,Qe=Y.startInvitation,$e=Y.startInterview,et=Y.toggle,tt=Y.update;export{ze as CustomerAgent,Le as boot,Be as chooseInvitation,Ve as ensureInvitation,He as getInterviewSession,X as getInterviewState,Ue as getSession,We as getState,Z as getSupportState,Ge as hide,Ke as identify,Q as loadInterviewReward,k as n,qe as on,Je as openEntry,A as r,$ as sendInterviewMessage,Ye as setContext,Xe as show,Ze as shutdown,$e as startInterview,Qe as startInvitation,O as t,et as toggle,tt as update};
|
|
1
|
+
import{n as e,t}from"./chunks/constants-Do-S47mc.js";import{r as n,t as r}from"./chunks/interviewTypes-Ch2NsXKB.js";import{i,t as a}from"./chunks/launcherAnchorStore-JMTZZGKC.js";import{_ as o,b as s,f as c,g as l,m as u,n as d,p as f,u as p,v as m,y as h}from"./chunks/routes-Dh46ka4-.js";import{a as g,c as _,d as v,i as y,l as b,n as x,o as S,r as ee,u as te}from"./chunks/navigationState-LdqG_Osx.js";import{n as ne,r as re}from"./chunks/i18n-Q8u2wtW4.js";var C=Object.create,w=Object.defineProperty,T=Object.getOwnPropertyDescriptor,ie=Object.getOwnPropertyNames,E=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty,O=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),k=(e,t)=>{let n={};for(var r in e)w(n,r,{get:e[r],enumerable:!0});return t||w(n,Symbol.toStringTag,{value:`Module`}),n},ae=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=ie(t),a=0,o=i.length,s;a<o;a++)s=i[a],!D.call(e,s)&&s!==n&&w(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=T(t,s))||r.enumerable});return e},A=(e,t,n)=>(n=e==null?{}:C(E(e)),ae(t||!e||!e.__esModule?w(n,`default`,{value:e,enumerable:!0}):n,e));function oe(){let e=s(m());return{async checkEligibility(t,n){let{data:r}=await e.request(`/interviews/eligibility`,{body:t,method:`POST`,signal:n?.signal});return r},async chooseInvitation(t,n){await e.request(`/interviews/invitations/${t}/choice`,{body:n,method:`PATCH`})},async createInvitation(t){let{data:n}=await e.request(`/interviews/invitations`,{body:t,method:`POST`});return n},async getReward(t){let{data:n}=await e.request(`/interviews/sessions/${t}/reward`);return n},async getSession(t,n){let{data:r}=await e.request(`/interviews/sessions/${t}`,{signal:n?.signal});return r},async sendMessage(t,n){let{data:r}=await e.request(`/interviews/sessions/${t}/messages`,{body:n,method:`POST`});return r},async startInvitation(t,n){let{data:r}=await e.request(`/interviews/invitations/${t}/start`,{body:n,method:`POST`});return r}}}function j(e){return typeof e==`string`&&e.trim()?e.trim():null}function M(e){return e.anonymous_id??e.user?.id}function N(e){return{...e.context,...e.user,userId:e.user?.id,visitorId:M(e)}}function P(e){return j(e.brand?.name)??`Customer Agent`}function F(e){return{appId:e.app_id,locale:e.locale,pageContext:e.context??{},userContext:N(e),visitorId:M(e)}}function se(e,t){return{appId:e.app_id,campaignId:t.campaignId,context:e.context??{},showRequestId:t.showRequestId,userContext:N(e),variantKey:t.variantKey,visitorId:M(e)}}function I(e){return e instanceof Error?e.message:`CustomerAgent interview request failed.`}function L(e,t){return JSON.stringify(e)===JSON.stringify(t)}function R(e,t){return e.status===n.ACTIVE?{entryId:`interview/session/${e.sessionId}`,sessionId:e.sessionId,status:r.ACTIVE,title:t}:{sessionId:e.sessionId,sessionStatus:e.status,status:r.TERMINAL}}function ce(e){return{conversationId:`interview/session/${e}`,conversationType:`interview`,entryId:`interview/session/${e}`,interviewSessionId:e}}function z(e){return typeof crypto<`u`&&`randomUUID`in crypto?`${e}-${crypto.randomUUID()}`:`${e}-${Date.now()}-${Math.random().toString(36).slice(2)}`}function le({api:e,buildContextPayload:t=p,cache:i,emitAvailable:a,emitConversationCreated:o,emitSessionStarted:s,emitStateChanged:c,getOptions:l}){let d=new Set,f={status:r.IDLE},m=0,h=null,g=null,_=null,v=null,y=null,b=null,x=null;function S(e){L(f,e)||(f=e,c(f))}function ee(e,t){y=t,b=null,x=null;let n={body:t.invitation.body,campaignId:t.campaignId,laterCta:t.invitation.laterCta,startCta:t.invitation.startCta,status:r.AVAILABLE,title:t.invitation.title};S(n),d.has(e)||(d.add(e),a(n))}function te(){y=null,b=null,x=null,S({status:r.IDLE})}function ne(){v?.abort(),v=null,g=null,_=null}async function re(t,n,i){let a=l(),o=await e.checkEligibility(F(a),{signal:i});if(!(n!==m||t!==u(l()))){if(h=t,!o.eligible||o.status&&o.status!==r.AVAILABLE||!o.campaignId||!o.showRequestId||!o.invitation){y=null,b=null,x=null,S({status:r.UNAVAILABLE});return}ee(t,o)}}async function C(){let t=l(),a=u(t);if(!a){m+=1,ne(),h=null,te();return}let o=g!==null&&_!==a;if(o&&ne(),!o&&h===a&&f.status!==r.ERROR)return;if(g&&_===a){await g;return}ne();let s=++m,c=new AbortController;v=c,_=a,g=(async()=>{S({status:r.CHECKING});try{let r=i.read(t);if(r)try{let t=await e.getSession(r.sessionId,{signal:c.signal});if(s!==m||a!==u(l()))return;if(t.status!==n.ACTIVE){x=null,i.clear(l()),await re(a,s,c.signal);return}x=t,S(R(t,r.title)),h=a;return}catch{if(s!==m||a!==u(l()))return;x=null,i.clear(l())}await re(a,s,c.signal)}catch(e){if(s!==m||a!==u(l()))return;x=null,S({error:{message:I(e)},status:r.ERROR})}finally{_===a&&(g=null,_=null),v===c&&(v=null)}})(),await g}return{async chooseInvitation(t,n){await e.chooseInvitation(t,{choice:n})},async ensureInvitation(){let t=u(l());if(!t)throw m+=1,ne(),h=null,te(),Error(`No interview invitation is available.`);if((!y||f.status!==r.AVAILABLE)&&await C(),!y||f.status!==r.AVAILABLE)throw Error(`No interview invitation is available.`);if(b)return b;let n=await e.createInvitation(se(l(),y));return t===u(l())&&(b=n.invitationId),n.invitationId},getState(){return f.status===r.ACTIVE?{...f,title:j(l().brand?.name)??f.title??P(l())}:f},getActiveSession(){return x},async loadReward(t=x?.sessionId){if(!t)throw Error(`Cannot load an interview reward before the session starts.`);return await e.getReward(t)},syncAvailability:C,async startInvitation(r){let a=l(),c=u(a),d=await e.startInvitation(r,t(a));if(!c||c!==u(l()))return{entryId:`interview/session/${d.sessionId}`,session:d,sessionId:d.sessionId};x=d,d.status===n.ACTIVE?i.write(a,{entryId:`interview/session/${d.sessionId}`,priority:20,sessionId:d.sessionId,title:P(a)}):i.clear(a),S(R(d,P(a)));let f=ce(d.sessionId);return o?.(f),s?.(f),{entryId:`interview/session/${d.sessionId}`,session:d,sessionId:d.sessionId}},async sendMessage(t){if(!x||f.status!==r.ACTIVE)throw Error(`Cannot send an interview message before the session starts.`);let a=u(l()),o=x.sessionId,s=await e.sendMessage(o,{clientMessageId:z(`interview-message`),content:t,locale:l().locale});a!==u(l())||f.status!==r.ACTIVE||(x={...x,messages:[...x.messages,{content:t,createdAt:new Date().toISOString(),id:z(`interview-user`),role:`user`},{content:s.assistantMessage,createdAt:new Date().toISOString(),id:z(`interview-assistant`),role:`assistant`}],status:s.sessionStatus},s.sessionStatus!==n.ACTIVE&&i.clear(l()),S(R(x,P(l()))))}}}function ue(e){let t=s(e);return{async startSession(e,n){let{data:r}=await t.request(`/session`,{body:{...e,conversationId:n??void 0},conversationId:n,method:`POST`});return{conversationId:r.conversationId,messages:r.messages}},async updateContext(e,n){let{data:r}=await t.request(`/context`,{body:e,conversationId:n,method:`PATCH`});return r}}}function B(e){return e instanceof Error?e.message:`CustomerAgent support session request failed.`}function de(e){return e instanceof h&&e.code===`NOT_FOUND`}function V(e,t){return JSON.stringify(e)===JSON.stringify(t)}function H(e){return Array.isArray(e)?`[${e.map(e=>H(e)).join(`,`)}]`:e&&typeof e==`object`?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${H(t)}`).join(`,`)}}`:JSON.stringify(e)}function fe({api:e,buildContextPayload:t=p,cache:n,emitConversationCreated:r,emitStateChanged:i,getOptions:a,onSessionReady:o}){let s={status:b.IDLE},c=0,l=null,u=null,d=null,f=null,m=null,h=null,g=null,_=null;function y(e){V(s,e)||(s=e,i(s))}async function x(n){let r=t(a());return await e.startSession(r,n)}async function S(n,r,i){if(!e.updateContext)return;let o={...t(n),conversationId:i},s=H({key:r,payload:o});_!==s&&await e.updateContext(o,i).then(()=>{r===v(a())&&(_=s)}).catch(()=>void 0)}return{async ensureSession(){let e=a(),t=v(e);if(s.status===b.READY&&u===t)return l??{conversationId:s.conversationId,messages:[]};if(m&&h===t){let e=await m;if(e)return e}if(d&&f===t)return await d;let i=n.read(e),p=++c;y({status:i?b.REFRESHING:b.STARTING}),f=t,d=(async()=>{try{return await x(i)}catch(t){if(!i||!de(t))throw t;return n.clear(e),await x(null)}})();try{let e=await d;return p!==c||t!==v(a())?e:(l=e,u=t,n.write(a(),e.conversationId),o?.(a(),e),(!i||i!==e.conversationId)&&r(e.conversationId),y({conversationId:e.conversationId,status:b.READY}),e)}catch(r){throw p!==c||t!==v(a())?r:(i&&n.clear(e),y({error:{message:B(r)},status:b.ERROR}),r)}finally{f===t&&(d=null,f=null)}},getState(){return s},getSessionSnapshot(){return u===v(a())?l:null},invalidateSession(){let e=a(),t=v(e);c+=1,n.clear(e),u===t&&(l=null,u=null),f===t&&(d=null,f=null),h===t&&(m=null,h=null),g=null,_=null,y({status:b.IDLE})},async syncCachedSession(){let r=a(),i=v(r);if(s.status===b.READY&&u===i){g=i,await S(r,i,s.conversationId);return}if(g===i&&s.status!==b.ERROR)return;if(m&&h===i){await m;return}if(d&&f===i)return;let p=n.read(r);if(!p){g=i,y({status:b.IDLE});return}let _=++c;h=i,m=(async()=>{y({status:b.REFRESHING});try{let s=await e.startSession(t(r),p);return _!==c||i!==v(a())?null:(l=s,u=i,n.write(a(),s.conversationId),o?.(a(),s),y({conversationId:s.conversationId,status:b.READY}),g=i,await S(a(),i,s.conversationId),s)}catch(e){return _!==c||i!==v(a())?null:(n.clear(a()),de(e)?(u===i&&(l=null,u=null),y({status:b.IDLE}),g=i,null):(y({error:{message:B(e)},status:b.ERROR}),null))}finally{h===i&&(m=null,h=null)}})(),await m}}}function pe(e){let t=new EventTarget;return{emit(...n){let[r,i={}]=n,a={...e(),...i,timestamp:new Date().toISOString(),type:r};t.dispatchEvent(new CustomEvent(r,{detail:a}))},on(e,n){let r=e=>n(e.detail);return t.addEventListener(e,r),()=>t.removeEventListener(e,r)}}}function U(e){let t=e.tagName.toLowerCase();return t===`button`||t===`input`||t===`select`||t===`textarea`||t===`summary`||t===`a`&&e.hasAttribute(`href`)}function me(e,t,n){if(n===void 0){delete e[t];return}e[t]=n}function he(e,t){let n=t.isOpen?`open`:`closed`;e.setAttribute(`aria-expanded`,t.isOpen?`true`:`false`),e.dataset.state=n,e.dataset.customerAgentState=n,me(e.dataset,`customerAgentActiveEntry`,t.activeEntryId),me(e.dataset,`customerAgentActiveKind`,t.activeKind),e.dataset.customerAgentHasInvitation=t.hasInvitation?`true`:`false`,e.dataset.customerAgentHasUnread=t.hasUnread?`true`:`false`,me(e.dataset,`customerAgentViewport`,t.viewport),delete e.dataset.customerAgentLauncher,U(e)||(e.setAttribute(`role`,`button`),e.hasAttribute(`tabindex`)||(e.tabIndex=0))}function ge(){let e=document.createElement(`div`);e.style.cssText=[`position: fixed`,`visibility: hidden`,`height: env(safe-area-inset-bottom)`,`pointer-events: none`].join(`;`),document.body.appendChild(e);let t=Number.parseFloat(getComputedStyle(e).height)||0;return e.remove(),t}function _e(e={}){let t=window.visualViewport,n=window.innerWidth,r=window.innerHeight,i=t?.height??r,a=e.mode!==`auto`&&e.mode!==void 0?!0:n<=640,o=a?e.mode===`bottom-sheet`?`bottom-sheet`:`fullscreen`:`desktop`,s=Math.max(0,t?.offsetTop??0);return{height:r,isMobile:a,keyboardInset:Math.max(0,r-i-s),mode:a?`mobile`:`desktop`,offsetTop:s,presentation:o,safeAreaBottom:ge(),visualHeight:i,width:n}}e();var W=null,G=null,K=null,ve=null,ye=`customer-agent-widget`,be=260,xe=[],Se=new WeakMap,Ce=0;async function we(){return K||(ve??=Promise.all([import(`./chunks/react-CKmEJ8Ba.js`).then(e=>A(e.t(),1)),import(`./chunks/client-duvjg9sB.js`).then(e=>A(e.t(),1)),import(`./chunks/App-B4dn3hns.js`)]).then(([e,t,n])=>(K={createElement:e.createElement,createRoot:t.createRoot,preloadWidgetPanelShell:n.preloadWidgetPanelShell,WidgetApp:n.WidgetApp},K)).catch(e=>{throw ve=null,e}),await ve)}function Te(e){let t=xe.splice(0);for(let n of t)n.active&&(n.unsubscribe=e.on(n.eventName,n.handler))}function Ee(){document.getElementById(ye)?.remove()}function De(e){return typeof e==`string`?document.querySelector(e)??document.body:e??document.body}function Oe(e){let t=Se.get(e);if(t)return t;let n=`element-${++Ce}`;return Se.set(e,n),n}function ke(e){return typeof e==`string`?document.querySelector(e):e??null}function Ae(e){return Object.prototype.toString.call(e)===`[object Object]`}function q(e){return Array.isArray(e)?`[${e.map(e=>q(e)).join(`,`)}]`:e&&typeof e==`object`?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${q(t)}`).join(`,`)}}`:JSON.stringify(e)}function je(e){return typeof e==`string`?`selector:${e}`:e?`element:${Oe(e)}`:null}function Me(e){let t=Oe(De(e.mount)),{launcher:n,mount:r,...i}=e;return{fingerprint:q({...i,launcher:n?{...n,target:je(n.target)}:void 0,mount:t}),key:q({appId:e.app_id,mount:t})}}function Ne(e,t){let n={...e};for(let[r,i]of Object.entries(t)){let t=e[r];n[r]=Ae(t)&&Ae(i)?Ne(t,i):i}return n}function J(e){return typeof e==`string`&&e.trim()?e.trim():null}function Pe(e,t){let n=t?.replace(`_`,`-`),r=n?.split(`-`)[0];return(n?e[n]:void 0)??(r?e[r]:void 0)??e.en??Object.values(e)[0]}function Fe(e,t){let n=J(t.branding.name)??J(t.branding.agentName)??J(t.branding.workspaceName),r=J(t.branding.primaryColor)??J(t.branding.primary_color),i=Pe(t.welcomeMessage,e.locale);return{...e,brand:{...e.brand,name:e.brand?.name??n??e.brand?.name},messages:{...i?{welcome_message:i}:{},...e.messages},theme:{...e.theme,primaryColor:e.theme?.primaryColor??r??e.theme?.primaryColor}}}function Ie(e,n=Me(e)){W?.shutdown(),Ee();let r=l(),u=document.createElement(`div`),p=pe(()=>({appId:b.app_id,widgetId:r})),v=De(e.mount),b=o(e,r),C=e.launcher?.target,w=!!b.open_on_init,T=y(b),ie=w,E=null,D=null,O=null,k=null,ae=null,A=null,j=null,M=null,N=re(b.locale,b.messages),P=_e(b.mobile),F=!1,se=0,I=null,L=`idle`,R=null,ce=!1,z=!1,B=!1,de=null,V=fe({api:ue(m()),cache:te(),emitConversationCreated(e){p.emit(t.CONVERSATION_CREATED,{...Ke(e)})},emitStateChanged(e){p.emit(t.SUPPORT_STATE_CHANGED,{support:e}),U(),J()},getOptions(){return b},onSessionReady(e,t){c.hydrateSession(e,t)}}),H=le({api:oe(),cache:f(),emitAvailable(e){p.emit(t.INTERVIEW_AVAILABLE,e)},emitConversationCreated(e){p.emit(t.CONVERSATION_CREATED,e)},emitSessionStarted(e){p.emit(t.INTERVIEW_SESSION_STARTED,e)},emitStateChanged(e){p.emit(t.INTERVIEW_STATE_CHANGED,{interview:e}),U(),J()},getOptions(){return b}});u.id=ye,u.className=`customer-agent-namespace`,u.dataset.customerAgent=`container`,v.appendChild(u);function U(){if(!E)return;let e=g(T.memoryRoute),t=T.requestedTarget?.type===`entry`?e?.split(`/`)[0]:T.requestedTarget?.type??e?.split(`/`)[0]??`support`;he(E,{activeEntryId:e,activeKind:t,hasInvitation:!1,hasUnread:!1,isOpen:w,targetConfigured:C!==void 0,targetConnected:!!E,viewport:P.mode})}function me(){!E||!D||(D.ariaExpanded===null?E.removeAttribute(`aria-expanded`):E.setAttribute(`aria-expanded`,D.ariaExpanded),D.role===null?E.removeAttribute(`role`):E.setAttribute(`role`,D.role),D.state===null?delete E.dataset.state:E.dataset.state=D.state,D.tabIndex===null?E.removeAttribute(`tabindex`):E.setAttribute(`tabindex`,D.tabIndex))}function ge(){ae?.(),ae=null,a(E),me(),E=null,D=null}function ve(){typeof C!=`string`||O!==null||(O=window.requestAnimationFrame(()=>{if(O=null,!(F||typeof C!=`string`)){if(ke(C)===E){U();return}J()}}))}function xe(){if(k?.disconnect(),k=null,typeof C!=`string`||typeof MutationObserver>`u`)return;let e=document.documentElement??document.body;e&&(k=new MutationObserver(ve),k.observe(e,{attributes:!0,childList:!0,subtree:!0}))}function Se(){let e=ke(C);if(e===E){U();return}if(ge(),!e)return;let t=e;E=t,i(t),D={ariaExpanded:t.getAttribute(`aria-expanded`),role:t.getAttribute(`role`),state:t.dataset.state??null,tabIndex:t.getAttribute(`tabindex`)};function n(e){e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation()}function r(e){n(e),Q(!w)}function a(e){e.key!==`Enter`&&e.key!==` `||(n(e),Q(!w))}t.addEventListener(`click`,r,{capture:!0}),t.addEventListener(`keydown`,a,{capture:!0}),ae=()=>{t.removeEventListener(`click`,r,{capture:!0}),t.removeEventListener(`keydown`,a,{capture:!0})},U()}function Ce(){L===`idle`&&(L=`queued`,queueMicrotask(()=>{F||(L=`emitted`,p.emit(t.WIDGET_READY))}))}function Oe(e){let n=!0;return queueMicrotask(()=>{F||!n||e({appId:b.app_id,timestamp:new Date().toISOString(),type:t.WIDGET_READY,widgetId:r})}),()=>{n=!1}}function Ae(e){let n=e instanceof Error?e.message:`CustomerAgent widget UI failed to load.`;console.error(`CustomerAgent widget UI failed to load.`,e),p.emit(t.ERROR,{message:n})}function q(){return R??=we().then(async e=>{F||(I??=e.createRoot(u),await e.preloadWidgetPanelShell())}).catch(e=>{throw R=null,e}),R}function je(){if(!F){if(!E||ie||w){J();return}if(!K||!I){J();return}I.render(K.createElement(K.WidgetApp,{activeTarget:T.requestedTarget,hasPanel:!1,hasCustomLauncher:!0,eventBus:p,interviewRuntime:{chooseInvitation:H.chooseInvitation,ensureInvitation:H.ensureInvitation,getActiveSession:H.getActiveSession,startInvitation:H.startInvitation},isOpen:!1,launcherTargetElement:E,memoryRoute:T.memoryRoute,onMemoryRouteChange:Ye,onOpenChange:Q,options:b,resolvedLocale:N,runtimeState:{interview:H.getState(),support:V.getState()},supportRuntime:{ensureSession:V.ensureSession,getSessionSnapshot:V.getSessionSnapshot,invalidateSession:V.invalidateSession},isViewportSettling:B,viewport:P,widgetId:r})),Ce()}}function J(){if(!F){if(Se(),E&&!ie&&!w){ce=!1,q().then(je).catch(Ae);return}if(!K||!I){ce=!0,we().then(e=>{F||(I??=e.createRoot(u),ce&&(ce=!1,J()))}).catch(e=>{Ae(e)});return}I.render(K.createElement(K.WidgetApp,{activeTarget:T.requestedTarget,hasPanel:ie,hasCustomLauncher:!!E,eventBus:p,interviewRuntime:{chooseInvitation:H.chooseInvitation,ensureInvitation:H.ensureInvitation,getActiveSession:H.getActiveSession,startInvitation:H.startInvitation},isOpen:w,launcherTargetElement:E,memoryRoute:T.memoryRoute,onMemoryRouteChange:Ye,onOpenChange:Q,options:b,resolvedLocale:N,runtimeState:{interview:H.getState(),support:V.getState()},supportRuntime:{ensureSession:V.ensureSession,getSessionSnapshot:V.getSessionSnapshot,invalidateSession:V.invalidateSession},isViewportSettling:B,viewport:P,widgetId:r})),q().then(Ce).catch(Ae)}}function Pe(){let e=++se;N=re(b.locale,b.messages),ne(b.locale,b.messages).then(t=>{F||e!==se||(N=t,J())}).catch(n=>{if(F||e!==se)return;let r=n instanceof Error?n.message:`CustomerAgent locale messages failed to load.`;console.error(`CustomerAgent locale messages failed to load.`,n),p.emit(t.ERROR,{message:r})})}function Ie(){N=re(b.locale,b.messages),P=_e(b.mobile),X()}function Le(e){S(e)!==S(b)&&(T=y(b))}function Y(){P=_e(b.mobile),X()}function Re(){return w&&!b.embedded&&P.presentation===`fullscreen`}function ze(){let e=window.navigator.platform,t=window.navigator.maxTouchPoints??0;return/iP(ad|hone|od)/.test(e)||e===`MacIntel`&&t>1}function Be(){if(de)return;let e=document.body,t=document.documentElement,n=window.scrollX,r=window.scrollY,i=ze()?`fixed`:`overflow`,a=Math.max(0,window.innerWidth-t.clientWidth),o=Number.parseFloat(window.getComputedStyle(e).paddingRight)||0;de={bodyLeft:e.style.left,bodyOverflow:e.style.overflow,bodyOverscrollBehavior:e.style.overscrollBehavior,bodyPaddingRight:e.style.paddingRight,bodyPosition:e.style.position,bodyRight:e.style.right,bodyTop:e.style.top,bodyWidth:e.style.width,htmlOverflow:t.style.overflow,htmlOverscrollBehavior:t.style.overscrollBehavior,htmlScrollbarGutter:t.style.scrollbarGutter,scrollX:n,scrollY:r,strategy:i},t.style.overflow=`hidden`,t.style.overscrollBehavior=`contain`,e.style.overflow=`hidden`,e.style.overscrollBehavior=`contain`,`scrollbarGutter`in t.style?t.style.scrollbarGutter=`stable`:a>0&&(e.style.paddingRight=`${o+a}px`),i===`fixed`&&(e.style.left=`-${n}px`,e.style.position=`fixed`,e.style.right=`0`,e.style.top=`-${r}px`,e.style.width=`100%`)}function Ve(){let e=de;if(!e)return;de=null;let t=document.body,n=document.documentElement;n.style.overflow=e.htmlOverflow,n.style.overscrollBehavior=e.htmlOverscrollBehavior,n.style.scrollbarGutter=e.htmlScrollbarGutter,t.style.left=e.bodyLeft,t.style.overflow=e.bodyOverflow,t.style.overscrollBehavior=e.bodyOverscrollBehavior,t.style.paddingRight=e.bodyPaddingRight,t.style.position=e.bodyPosition,t.style.right=e.bodyRight,t.style.top=e.bodyTop,t.style.width=e.bodyWidth,e.strategy===`fixed`&&window.scrollTo(e.scrollX,e.scrollY)}function X(){if(Re()){Be();return}Ve()}function He(e){return w&&!b.embedded&&e.presentation===`fullscreen`}function Ue(){j!==null&&(window.clearTimeout(j),j=null),B&&(B=!1,J())}function We(){j!==null&&window.clearTimeout(j),j=window.setTimeout(()=>{j=null,!F&&Ue()},be)}function Z(){A===null&&(A=window.requestAnimationFrame(()=>{if(A=null,F)return;let e=_e(b.mobile),t=He(e);P=e,X(),t?(B=!0,We()):(j!==null&&(window.clearTimeout(j),j=null),B=!1),J()}))}function Ge(){z||(z=!0,queueMicrotask(()=>{z=!1,!F&&(Je(),V.syncCachedSession(),H.syncAvailability())}))}function Ke(e){return{conversationId:e,conversationType:`support`,entryId:d(e),supportConversationId:e}}function qe(){return{activeEntryId:g(T.memoryRoute),activeTarget:T.requestedTarget,appId:b.app_id,isOpen:w,isReady:L===`emitted`,launcher:{targetConfigured:C!==void 0,targetConnected:!!E},support:V.getState(),interview:H.getState(),widgetId:r}}function Je(){let e=m(),n=`${e}::${b.app_id}`;M!==n&&(M=n,s(e).request(`/apps/${b.app_id}/public-config`).then(({data:e})=>{M===n&&(b=Fe(b,e),Pe(),Y(),J())}).catch(e=>{if(e instanceof h&&e.code===`NOT_FOUND`)return;let n=e instanceof Error?e.message:`CustomerAgent public config request failed.`;console.error(`CustomerAgent public config request failed.`,e),p.emit(t.ERROR,{message:n})}))}window.addEventListener(`resize`,Z),window.addEventListener(`orientationchange`,Z),window.visualViewport?.addEventListener(`resize`,Z),window.visualViewport?.addEventListener(`scroll`,Z);function Q(e){if(e?ie=!0:T=x(T),w===e){J();return}w=e,X(),U(),J(),p.emit(w?t.WIDGET_OPENED:t.WIDGET_CLOSED)}function $(e){T=_(b,T,e)}function Ye(e){T=ee(b,T,e),U()}let Xe={async chooseInvitation(e,t){await H.chooseInvitation(e,t)},async ensureInvitation(){return{invitationId:await H.ensureInvitation()}},hide(){Q(!1)},getInterviewState(){return H.getState()},getInterviewSession(){return H.getActiveSession()},async getSession(){return{conversationId:(await V.ensureSession()).conversationId}},getState:qe,getSupportState(){return V.getState()},identify(e){let t=b;b={...b,user:e},Le(t),Ie(),J(),Ge()},on(e,n){let r=p.on(e,n),i;return e===t.WIDGET_READY&&L===`emitted`&&(i=Oe(n)),()=>{i?.(),r()}},openEntry(e){$({entryId:e,type:`entry`}),Q(!0)},async loadInterviewReward(e){return await H.loadReward(e)},async sendInterviewMessage(e){await H.sendMessage(e)},setContext(e,t={}){b={...b,context:t.merge===!1?e:Ne(b.context,e),context_ready:t.ready??b.context_ready},Ie(),J(),Ge()},show(e){$(e),Q(!0)},shutdown(){F=!0,W===Xe&&(W=null,G=null),I?.unmount(),window.removeEventListener(`resize`,Z),window.removeEventListener(`orientationchange`,Z),window.visualViewport?.removeEventListener(`resize`,Z),window.visualViewport?.removeEventListener(`scroll`,Z),A!==null&&(window.cancelAnimationFrame(A),A=null),j!==null&&(window.clearTimeout(j),j=null),Ve(),k?.disconnect(),k=null,O!==null&&(window.cancelAnimationFrame(O),O=null),ge(),u.remove()},async startInvitation(e){let t=await H.startInvitation(e);return $({sessionId:t.sessionId,type:`interview`}),J(),{entryId:t.entryId,sessionId:t.sessionId}},async startInterview(){$({type:`interview`}),Q(!0);try{let e=await H.ensureInvitation(),t=await H.startInvitation(e);return $({sessionId:t.sessionId,type:`interview`}),J(),{entryId:t.entryId,sessionId:t.sessionId}}catch(e){throw $({type:`support`}),J(),e}},toggle(e){e&&$(e),Q(!w)},update(e){let t=b;Object.prototype.hasOwnProperty.call(e,`launcher`)&&(C=e.launcher?.target,xe()),b={...o({...b,...e,context:e.context??b.context},b.widgetId),embedded:b.embedded},Le(t),Pe(),Y(),J(),Ge()}};return W=Xe,G=n,Te(p),xe(),Pe(),X(),J(),Ge(),Xe}function Le(e){if(W&&e.app_id){let t=Me(e);return G?.key===t.key?(G.fingerprint!==t.fingerprint&&(W.update(e),G=t),e.open_on_init&&W.show(),W):Ie(e,t)}return Ie(e)}var Y={boot:Le,async chooseInvitation(e,t){await W?.chooseInvitation(e,t)},async ensureInvitation(){return W?await W.ensureInvitation():null},getInterviewState(){return W?.getInterviewState()??null},getInterviewSession(){return W?.getInterviewSession()??null},async getSession(){return W?await W.getSession():null},getState(){return W?.getState()??null},getSupportState(){return W?.getSupportState()??null},hide(){W?.hide()},identify(e){W?.identify(e)},on(e,t){if(W)return W.on(e,t);let n={active:!0,eventName:e,handler:t};return xe.push(n),()=>{n.active=!1,n.unsubscribe?.()}},setContext(e,t){W?.setContext(e,t)},openEntry(e){W?.openEntry(e)},async loadInterviewReward(e){return W?await W.loadInterviewReward(e):null},async sendInterviewMessage(e){await W?.sendInterviewMessage(e)},show(e){W?.show(e)},shutdown(){W?.shutdown(),W=null,G=null},async startInvitation(e){return W?await W.startInvitation(e):null},async startInterview(){return W?await W.startInterview():null},toggle(e){W?.toggle(e)},update(e){W?.update(e)}};function Re(e,...t){switch(e){case`boot`:return Y.boot(t[0]);case`chooseInvitation`:return Y.chooseInvitation(t[0],t[1]);case`ensureInvitation`:return Y.ensureInvitation();case`getSession`:return Y.getSession();case`getState`:return Y.getState();case`getSupportState`:return Y.getSupportState();case`getInterviewState`:return Y.getInterviewState();case`getInterviewSession`:return Y.getInterviewSession();case`hide`:return Y.hide();case`identify`:return Y.identify(t[0]);case`on`:return Y.on(t[0],t[1]);case`openEntry`:return Y.openEntry(t[0]);case`loadInterviewReward`:return Y.loadInterviewReward(t[0]);case`sendInterviewMessage`:return Y.sendInterviewMessage(t[0]);case`setContext`:return Y.setContext(t[0],t[1]);case`show`:return Y.show(t[0]);case`shutdown`:return Y.shutdown();case`startInvitation`:return Y.startInvitation(t[0]);case`startInterview`:return Y.startInterview();case`toggle`:return Y.toggle(t[0]);case`update`:return Y.update(t[0]);default:throw Error(`CustomerAgent received an unknown command: ${String(e)}.`)}}var ze=Object.assign(Re,Y),Be=Y.chooseInvitation,Ve=Y.ensureInvitation,X=Y.getInterviewState,He=Y.getInterviewSession,Ue=Y.getSession,We=Y.getState,Z=Y.getSupportState,Ge=Y.hide,Ke=Y.identify,qe=Y.on,Je=Y.openEntry,Q=Y.loadInterviewReward,$=Y.sendInterviewMessage,Ye=Y.setContext,Xe=Y.show,Ze=Y.shutdown,Qe=Y.startInvitation,$e=Y.startInterview,et=Y.toggle,tt=Y.update;export{ze as CustomerAgent,Le as boot,Be as chooseInvitation,Ve as ensureInvitation,He as getInterviewSession,X as getInterviewState,Ue as getSession,We as getState,Z as getSupportState,Ge as hide,Ke as identify,Q as loadInterviewReward,k as n,qe as on,Je as openEntry,A as r,$ as sendInterviewMessage,Ye as setContext,Xe as show,Ze as shutdown,$e as startInterview,Qe as startInvitation,O as t,et as toggle,tt as update};
|
package/sdk.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(){var e=`0.
|
|
1
|
+
(function(){var e=`0.6.0-test.67b72921d3c0`;function t(){typeof window>`u`||(window.__customerAgentVersion=e)}var n=`__customerAgentRuntime`,r=`__customerAgentScript`,i=typeof document<`u`&&document.currentScript instanceof HTMLScriptElement?document.currentScript:null,a=[];t();var o=`idle`,s=null,c=null;function l(e){return typeof e==`object`&&!!e}function u(e){return Array.prototype.slice.call(e)}function d(){let e=i?.src??new URL(`sdk.js`,window.location.href).toString();return new URL(`runtime.es.js`,e).toString()}function f(e){let t=e.CustomerAgent??e.default;if(typeof t!=`function`)throw Error(`CustomerAgent widget runtime module did not export CustomerAgent.`);return Object.assign(t,{[n]:!0})}function p(){if(!s)return;let e=a.splice(0);for(let t of e)t(s)}async function m(){return o===`ready`&&s?s:o===`loading`&&c?await c:(o=`loading`,c=import(d()).then(e=>(s=f(e),window.CustomerAgent=s,o=`ready`,p(),s)).catch(e=>{throw o=`failed`,c=null,console.error(`CustomerAgent widget runtime failed to load.`,e),e}),await c)}function h(e){if(s){e(s);return}a.push(e),m().catch(()=>{})}function g(e,t){h(n=>{let r=n[e];typeof r==`function`&&r(...t)})}function _(e){return h(t=>{t(`boot`,e)}),R}async function v(){return await(await m()).ensureInvitation()}async function y(e){return await(await m()).startInvitation(e)}async function b(){return await(await m()).startInterview()}async function x(e,t){await(await m()).chooseInvitation(e,t)}async function S(e){await(await m()).sendInterviewMessage(e)}async function C(e){return await(await m()).loadInterviewReward(e)}function w(e){g(`update`,[e])}function T(e){g(`show`,[e])}function E(){g(`hide`,[])}function D(e){g(`toggle`,[e])}function O(e){g(`openEntry`,[e])}function k(){g(`shutdown`,[])}function A(e){g(`identify`,[e])}function j(e,t){g(`setContext`,[e,t])}async function M(){return await(await m()).getSession()}function N(){return s?.getSupportState()??null}function P(){return s?.getInterviewState()??null}function F(){return s?.getInterviewSession()??null}function I(){return s?.getState()??null}function L(e,t){let n=!0,r=()=>{};return h(i=>{n&&(r=i.on(e,t))}),()=>{n=!1,r()}}var R={chooseInvitation:x,async ensureInvitation(){let e=await v();if(!e)throw Error(`CustomerAgent widget is not initialized.`);return e},getInterviewState(){let e=P();if(!e)throw Error(`CustomerAgent widget is not initialized.`);return e},getInterviewSession(){return F()},async getSession(){let e=await M();if(!e)throw Error(`CustomerAgent widget is not initialized.`);return e},getState(){let e=I();if(!e)throw Error(`CustomerAgent widget is not initialized.`);return e},getSupportState(){let e=N();if(!e)throw Error(`CustomerAgent widget is not initialized.`);return e},hide:E,identify:A,on:L,openEntry:O,loadInterviewReward:C,sendInterviewMessage:S,setContext:j,show:T,shutdown:k,async startInterview(){let e=await b();if(!e)throw Error(`CustomerAgent widget is not initialized.`);return e},async startInvitation(e){let t=await y(e);if(!t)throw Error(`CustomerAgent widget is not initialized.`);return t},toggle:D,update:w};function z(e,...t){switch(e){case`boot`:return _(t[0]);case`chooseInvitation`:return x(t[0],t[1]);case`ensureInvitation`:return v();case`getSession`:return M();case`getState`:return I();case`getSupportState`:return N();case`getInterviewState`:return P();case`getInterviewSession`:return F();case`hide`:return E();case`identify`:return A(t[0]);case`on`:return L(t[0],t[1]);case`openEntry`:return O(t[0]);case`loadInterviewReward`:return C(t[0]);case`sendInterviewMessage`:return S(t[0]);case`setContext`:return j(t[0],t[1]);case`show`:return T(t[0]);case`shutdown`:return k();case`startInvitation`:return y(t[0]);case`startInterview`:return b();case`toggle`:return D(t[0]);case`update`:return w(t[0]);default:throw Error(`CustomerAgent received an unknown command: ${String(e)}.`)}}var B=Object.assign(z,{[r]:!0,boot:_,chooseInvitation:x,ensureInvitation:v,getInterviewState:P,getInterviewSession:F,getSession:M,getState:I,getSupportState:N,hide:E,identify:A,on:L,openEntry:O,loadInterviewReward:C,sendInterviewMessage:S,setContext:j,show:T,shutdown:k,startInterview:b,startInvitation:y,toggle:D,update:w});function V(e){if(!l(e))return!1;let t=e.q;if(!Array.isArray(t)||t.length===0)return!1;for(let e of t)z(...u(e));return!0}function H(){if(!i)return;let e=i.dataset.appId;e&&B(`boot`,{app_id:e,open_on_init:i.dataset.open===`true`,position:i.dataset.position===`bottom-left`?`bottom-left`:`bottom-right`})}if(typeof window<`u`){let e=window.CustomerAgent;window.CustomerAgent=B,V(e)||H()}})();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CustomerAgentInterviewState, InterviewInvitationChoice, InterviewSessionResponse } from '../runtime/interview/interviewTypes';
|
|
2
2
|
import { CustomerAgentSupportState } from '../runtime/support/supportTypes';
|
|
3
|
-
import { WidgetContextJson, WidgetLauncherOptions, WidgetLauncherTarget, WidgetLocaleMessages, WidgetMobileOptions, WidgetTheme, WidgetUser } from '../types';
|
|
3
|
+
import { WidgetContextJson, WidgetHeaderOptions, WidgetLauncherOptions, WidgetLauncherTarget, WidgetLocaleMessages, WidgetMobileOptions, WidgetTheme, WidgetUser } from '../types';
|
|
4
4
|
import { CustomerAgentEventMap, CustomerAgentEventName } from './events';
|
|
5
5
|
export type { CustomerAgentInterviewState } from '../runtime/interview/interviewTypes';
|
|
6
6
|
export type { InterviewInvitationAction as CustomerAgentInterviewInvitationAction, InterviewInvitationChoice as CustomerAgentInterviewInvitationChoice } from '../runtime/interview/interviewTypes';
|
|
@@ -14,6 +14,7 @@ export type CustomerAgentOptions = {
|
|
|
14
14
|
};
|
|
15
15
|
context?: WidgetContextJson;
|
|
16
16
|
context_ready?: boolean;
|
|
17
|
+
header?: WidgetHeaderOptions;
|
|
17
18
|
launcher?: WidgetLauncherOptions & {
|
|
18
19
|
target?: WidgetLauncherTarget;
|
|
19
20
|
};
|
package/types/types.d.ts
CHANGED
|
@@ -34,6 +34,9 @@ export type WidgetTheme = {
|
|
|
34
34
|
primaryColor?: string;
|
|
35
35
|
radius?: number;
|
|
36
36
|
};
|
|
37
|
+
export type WidgetHeaderOptions = {
|
|
38
|
+
menu?: boolean;
|
|
39
|
+
};
|
|
37
40
|
export type WidgetViewport = {
|
|
38
41
|
height: number;
|
|
39
42
|
isMobile: boolean;
|
|
@@ -54,6 +57,7 @@ export type WidgetOptions = {
|
|
|
54
57
|
};
|
|
55
58
|
context?: WidgetContextJson;
|
|
56
59
|
context_ready?: boolean;
|
|
60
|
+
header?: WidgetHeaderOptions;
|
|
57
61
|
locale?: string;
|
|
58
62
|
launcher?: WidgetLauncherOptions;
|
|
59
63
|
messages?: WidgetLocaleMessages;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { CustomerAgentEventBus } from '../../../sdk/events';
|
|
2
2
|
import { ResolvedWidgetLocale } from '../../../sdk/i18n';
|
|
3
3
|
import { InterviewSessionController } from './interviewSessionController';
|
|
4
|
-
export declare function InterviewChatScreen({ controller, eventBus, locale, description, isExpanded, isOpen, onDownloadTranscript, onOpenMobileDock, onToggleExpanded, title, transcriptAppName, visitorName, viewportMode }: {
|
|
4
|
+
export declare function InterviewChatScreen({ controller, eventBus, isHeaderMenuEnabled, locale, description, isExpanded, isOpen, onDownloadTranscript, onOpenMobileDock, onToggleExpanded, title, transcriptAppName, visitorName, viewportMode }: {
|
|
5
5
|
controller: InterviewSessionController;
|
|
6
6
|
description?: string;
|
|
7
7
|
eventBus?: CustomerAgentEventBus;
|
|
8
|
+
isHeaderMenuEnabled?: boolean;
|
|
8
9
|
isExpanded?: boolean;
|
|
9
10
|
isOpen?: boolean;
|
|
10
11
|
locale: ResolvedWidgetLocale;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./constants-ip01F3Ef.js";import{r as t}from"./interviewTypes-Ch2NsXKB.js";import{t as n}from"./i18n-Q8u2wtW4.js";import{r}from"../runtime.es.js";import{t as i}from"./react-CKmEJ8Ba.js";import{A as a,C as o,D as s,E as c,O as l,S as u,T as d,_ as ee,a as f,c as p,d as m,g as h,i as g,j as _,l as v,o as y,p as b,s as x,t as S,u as C,v as w,w as T,y as te}from"./WidgetComposer-BtlsItsm.js";import{n as ne}from"./conversationRegistry-Y5Ouo35n.js";import{t as E}from"./jsx-runtime-S2ZBQkZm.js";import{t as D}from"./classNames-3q0x02_x.js";var O=r(i(),1),k=E();function A(e){return Array.isArray(e.content)?e.content.map(e=>e.type===`text`?e.text:``).filter(Boolean).join(`
|
|
2
|
-
`):String(e.content??``)}function j(e){return e instanceof Date&&!Number.isNaN(e.getTime())}function M(e){let t=e.createdAt;if(j(t))return t;if(typeof t==`string`||typeof t==`number`){let e=new Date(t);if(j(e))return e}return new Date}function N(e,t){let r=Math.max(0,Date.now()-e.getTime()),i=6e4,a=60*i,o=24*a;return r<i?t.messages.relative_time_now:r<a?n(t.messages.relative_time_minute,{count:String(Math.floor(r/i))}):r<o?n(t.messages.relative_time_hour,{count:String(Math.floor(r/a))}):n(t.messages.relative_time_day,{count:String(Math.floor(r/o))})}function P(e,t,n,r){let i=[n.getFullYear(),n.getMonth()+1,n.getDate()].map(e=>String(e).padStart(2,`0`)).join(`_`);return`${(e??`Customer Agent`).trim().replace(/[^a-z0-9\u4e00-\u9fa5]+/gi,`_`).replace(/^_+|_+$/g,``)||`Customer_Agent`}_${t}_${i}_${r}.txt`}function F(e){let t=`var(--messenger-conversation-part-radius)`;return{borderBottomLeftRadius:t,borderBottomRightRadius:t,borderTopLeftRadius:t,borderTopRightRadius:t}}function I({controller:n,eventBus:r,locale:i,description:u=i.messages.interview_session_description,isExpanded:f=!1,isOpen:p=!0,onDownloadTranscript:g,onOpenMobileDock:v,onToggleExpanded:y,title:x,transcriptAppName:S=x,visitorName:C=`You`,viewportMode:E=`desktop`}){let[j,I]=(0,O.useState)(()=>n.getState()),[L,R]=(0,O.useState)(!1),[z,B]=(0,O.useState)({}),V=(0,O.useRef)(null),H=(0,O.useRef)(!1),U=(0,O.useRef)(null),W=(0,O.useRef)(new Set),G=(0,O.useRef)(j.phase),K=(0,O.useRef)(!1),q=d({convertMessage:e=>e,isRunning:j.phase===b.SENDING,isSendDisabled:j.phase===b.SENDING||j.phase===b.TERMINAL,messages:j.messages,async onNew(t){let i=A(t).trim(),a=n.getState().sessionId;if(!i||!a)return;let o={conversationId:`interview/session/${a}`,conversationType:`interview`,entryId:`interview/session/${a}`,interviewSessionId:a},s=`interview-user-${Date.now()}`;r?.emit(e.MESSAGE_SENT,{...o,messageId:s,role:`user`}),r?.emit(e.MESSAGE_STARTED,{...o,role:`assistant`});try{await n.sendMessage(i);let t=[...n.getState().messages].reverse().find(e=>e.role===`assistant`);r?.emit(e.MESSAGE_COMPLETED,{...o,messageId:t?.id??`interview-assistant-${Date.now()}`,role:`assistant`})}catch(t){throw r?.emit(e.MESSAGE_FAILED,{...o,role:`assistant`}),t}}}),J=[...j.messages].reverse().find(e=>e.role===`assistant`&&A(e).trim())?.id??null,Y=j.messages.some(e=>A(e).trim());(0,O.useEffect)(()=>n.subscribe(I),[n]),(0,O.useEffect)(()=>{if(!L)return;function e(e){let t=e.target;t instanceof Node&&(U.current?.contains(t)||R(!1))}return document.addEventListener(`pointerdown`,e,!0),()=>document.removeEventListener(`pointerdown`,e,!0)},[L]),(0,O.useEffect)(()=>{if(j.phase===b.TERMINAL&&j.status===t.COMPLETED&&j.sessionId){if(W.current.has(j.sessionId))return;W.current.add(j.sessionId);let t={conversationId:`interview/session/${j.sessionId}`,conversationType:`interview`,entryId:`interview/session/${j.sessionId}`,interviewSessionId:j.sessionId};r?.emit(e.INTERVIEW_SESSION_COMPLETED,{...t,status:j.status}),n.loadReward(j.sessionId).then(n=>{r?.emit(e.INTERVIEW_REWARD_UPDATED,{...t,reward:n})}).catch(e=>{console.error(`CustomerAgent interview reward request failed.`,e)})}},[n,r,j.phase,j.sessionId,j.status]);let X=(0,O.useCallback)(()=>{let e=V.current;if(!e||e.disabled||E===`mobile`||e.closest(`form`)?.querySelector(`[role="dialog"]`))return!1;let t=e.value.length;return e.focus(),e.setSelectionRange(t,t),document.activeElement===e},[E]),Z=(0,O.useCallback)(()=>{let e=0,t=0;function n(){if(K.current&&j.phase===b.ACTIVE){if(X()){K.current=!1;return}e+=1,e<6&&(t=window.requestAnimationFrame(n))}}return t=window.requestAnimationFrame(n),()=>window.cancelAnimationFrame(t)},[X,j.phase]);(0,O.useEffect)(()=>{let e=G.current;G.current=j.phase;let t=V.current?.closest(`form`),n=document.activeElement,r=n instanceof HTMLElement&&!!t?.contains(n);if(j.phase===b.TERMINAL){K.current=!1,r&&n.blur();return}if(j.phase===b.SENDING){e!==b.SENDING&&(K.current=r||e===b.ACTIVE),r&&n.blur();return}if(!(e!==b.SENDING||j.phase!==b.ACTIVE||!K.current))return Z()},[Z,j.phase]);let Q=(0,O.useCallback)(()=>{H.current||!p||E===`mobile`||j.phase!==b.ACTIVE||window.requestAnimationFrame(()=>{H.current||=X()})},[X,p,j.phase,E]);function ae(e){V.current=e,e&&Q()}(0,O.useEffect)(()=>{if(!p){H.current=!1;return}Q()},[Q,p]);function $(e,t){B(n=>({...n,[e]:!t}))}function oe(e,t,n){let r=e.target;r instanceof Element&&r.closest(`a, button`)||$(t,n)}function se(e,t,n){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),$(t,n))}function ce(){let t=new Date,n=t.getTime(),a=m({conversationName:x,exportedAt:t,exportSourceName:S,locale:i.locale,messages:j.messages.map(e=>({createdAt:M(e),role:e.role===`user`?`user`:`assistant`,text:A(e)})),userSpeaker:C}),o=new Blob([a],{type:`text/plain;charset=utf-8`}),s=URL.createObjectURL(o),c=document.createElement(`a`);c.href=s,c.download=P(S,`interview`,t,n),c.click(),window.setTimeout(()=>URL.revokeObjectURL(s),0),r?.emit(e.TRANSCRIPT_DOWNLOADED,{...j.sessionId?{conversationId:`interview/session/${j.sessionId}`,entryId:`interview/session/${j.sessionId}`,interviewSessionId:j.sessionId}:{},conversationType:`interview`,messageCount:j.messages.length}),g?.()}return(0,k.jsx)(o,{runtime:q,children:(0,k.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col bg-bg-canvas`,"aria-label":x,"data-customer-agent-interview-chat":``,children:[(0,k.jsxs)(`header`,{className:D(`grid shrink-0 items-center gap-[var(--messenger-header-gap)] border-b border-border-divider bg-bg-canvas px-[var(--messenger-header-padding-x)] py-[var(--messenger-header-padding-y)]`,E===`mobile`?`grid-cols-[auto_auto_1fr_auto] pl-1`:`grid-cols-[auto_1fr_auto]`),"data-customer-agent-panel-header":``,children:[E===`mobile`?(0,k.jsx)(`button`,{className:`grid h-[var(--messenger-header-button-size)] w-6 cursor-pointer place-items-center rounded-md border-0 bg-transparent p-0 text-text-quaternary transition-colors hover:bg-gray-3 hover:text-text-primary focus-visible:outline-none focus-visible:shadow-none`,"aria-label":`Open conversations`,title:`Open conversations`,type:`button`,onClick:v,children:(0,k.jsx)(s,{size:16})}):null,(0,k.jsx)(`div`,{className:`grid h-[var(--messenger-header-avatar-size)] w-[var(--messenger-header-avatar-size)] place-items-center rounded-full bg-[var(--customer-agent-primary)] text-gray-1 shadow-[0_0_0_1px_var(--border-default)]`,"aria-hidden":`true`,children:(0,k.jsx)(ne,{size:16})}),(0,k.jsxs)(`div`,{className:`flex min-w-0 flex-col justify-center`,children:[(0,k.jsx)(`p`,{className:`m-0 truncate text-[length:var(--messenger-header-title-size)] font-semibold leading-[var(--messenger-header-title-line-height)]`,children:x}),(0,k.jsx)(`span`,{className:`block truncate text-[length:var(--messenger-header-subtitle-size)] leading-[var(--messenger-header-subtitle-line-height)] text-text-tertiary`,children:u})]}),Y||y?(0,k.jsx)(`div`,{className:`relative flex items-center gap-[var(--messenger-header-action-gap)] pr-[var(--messenger-header-button-size)]`,children:(0,k.jsxs)(`div`,{ref:U,onKeyDown:e=>{e.key===`Escape`&&(e.stopPropagation(),R(!1))},children:[(0,k.jsx)(`button`,{className:`grid h-[var(--messenger-header-button-size)] w-[var(--messenger-header-button-size)] cursor-pointer place-items-center rounded-[var(--messenger-header-button-radius)] border-0 bg-transparent text-text-quaternary transition-colors hover:bg-gray-3 hover:text-text-primary focus-visible:outline-none focus-visible:shadow-none data-[state=open]:bg-gray-3 data-[state=open]:text-text-primary`,"aria-expanded":L,"aria-haspopup":`menu`,"aria-label":i.messages.more_options,"data-state":L?`open`:`closed`,title:i.messages.more_options,type:`button`,onClick:()=>R(e=>!e),children:(0,k.jsx)(a,{size:16})}),L?(0,k.jsxs)(`div`,{className:`absolute top-[calc(100%+0.5rem)] right-[var(--messenger-header-button-size)] z-[var(--z-dropdown)] grid min-w-64 gap-1 rounded-lg border border-border-default bg-bg-elevated p-1 text-sm text-text-primary shadow-popover`,role:`menu`,children:[y?(0,k.jsxs)(`button`,{className:`flex w-full cursor-pointer items-center gap-2 rounded-md border-0 bg-transparent px-2 py-1.5 text-left text-sm text-text-secondary transition-colors hover:bg-gray-3 hover:text-text-primary focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]`,role:`menuitem`,type:`button`,onClick:()=>{R(!1),y()},children:[f?(0,k.jsx)(c,{size:16}):(0,k.jsx)(l,{size:16}),(0,k.jsx)(`span`,{children:f?i.messages.collapse_window:i.messages.expand_window})]}):null,Y?(0,k.jsxs)(`button`,{className:`flex w-full cursor-pointer items-center gap-2 rounded-md border-0 bg-transparent px-2 py-1.5 text-left text-sm text-text-secondary transition-colors hover:bg-gray-3 hover:text-text-primary focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]`,role:`menuitem`,type:`button`,onClick:()=>{R(!1),ce()},children:[(0,k.jsx)(_,{size:16}),(0,k.jsx)(`span`,{children:i.messages.download_transcript})]}):null]}):null]})}):(0,k.jsx)(`div`,{className:`h-[var(--messenger-header-button-size)] w-[var(--messenger-header-button-size)]`,"aria-hidden":`true`})]}),(0,k.jsx)(ee,{className:`relative flex min-h-0 flex-1 flex-col overflow-hidden bg-bg-canvas`,children:(0,k.jsx)(h,{className:`customer-agent-thread-viewport min-h-0 flex-1 overflow-y-auto bg-bg-canvas [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&>[data-radix-scroll-area-content]]:flex [&>[data-radix-scroll-area-content]]:min-h-full [&>[data-radix-scroll-area-content]]:flex-col [&>[data-radix-scroll-area-content]]:self-stretch [&>[data-radix-scroll-area-content]]:bg-inherit [&>div]:flex [&>div]:min-h-full [&>div]:flex-col [&>div]:self-stretch [&>div]:bg-inherit`,"data-customer-agent-thread-viewport":``,"aria-live":`polite`,autoScroll:!0,role:`log`,children:(0,k.jsxs)(`div`,{className:D(`flex min-h-full flex-col px-[var(--messenger-conversation-horizontal-padding)] pt-3`,`customer-agent-message-list`),"data-customer-agent-message-list":``,children:[(0,k.jsx)(T,{children:({message:e})=>{let t=e,n=A(t),r=e.role===`user`?`user`:`assistant`,a=r===`assistant`,o=t.id??`${r}:${n}`,s=M(t),c=a&&(z[o]??o===J);return n?(0,k.jsxs)(te,{className:r===`user`?`mt-[var(--messenger-conversation-part-stack-gap)] flex max-w-[var(--messenger-conversation-part-max-width)] flex-col self-end items-end`:`mt-[var(--messenger-conversation-part-stack-gap)] flex max-w-[var(--messenger-conversation-part-max-width)] flex-col self-start items-start`,"aria-expanded":a?c:void 0,"data-message-role":r,role:a?`button`:void 0,tabIndex:a?0:void 0,onClick:a?e=>oe(e,o,c):void 0,onKeyDown:a?e=>se(e,o,c):void 0,children:[(0,k.jsx)(`div`,{className:r===`user`?`w-fit max-w-full whitespace-pre-wrap bg-[var(--customer-agent-primary)] px-[var(--messenger-conversation-part-padding-x)] py-[var(--messenger-conversation-part-padding-y)] text-base leading-5 text-gray-1`:`w-fit max-w-full whitespace-pre-wrap bg-gray-3 px-[var(--messenger-conversation-part-padding-x)] py-[var(--messenger-conversation-part-padding-y)] text-base leading-5 text-text-secondary`,style:F(r),children:(0,k.jsx)(w,{children:({part:e})=>e.type===`text`?(0,k.jsx)(`span`,{children:e.text}):null})}),r===`assistant`?(0,k.jsxs)(`span`,{className:D(`overflow-hidden px-[var(--messenger-conversation-part-padding-x)] text-sm leading-5 text-text-tertiary transition-[max-height,opacity,transform,margin] duration-200 ease-out`,c?`mt-1 max-h-5 translate-y-0 opacity-100`:`mt-0 max-h-0 -translate-y-1 opacity-0`),"data-state":c?`visible`:`hidden`,"data-testid":`interview-message-metadata`,children:[x,` · `,i.messages.assistant_author_ai,` ·`,` `,N(s,i)]}):null]}):null}}),j.phase===b.SENDING?(0,k.jsx)(ie,{}):null]})})}),(0,k.jsx)(re,{inputRef:V,isHidden:j.phase===b.SENDING||j.phase===b.TERMINAL,locale:i,onInputRef:ae})]})})}function re({inputRef:e,isHidden:t,locale:n,onInputRef:r}){let i=u().composer,a=C({composerRuntime:i,inputRef:e});return(0,k.jsxs)(x,{className:D(`relative z-[var(--z-composer)] shrink-0 bg-transparent px-[var(--messenger-conversation-horizontal-padding)] pt-0 pb-[max(1rem,calc(1rem+var(--customer-agent-bottom-inset)))]`,`-mt-[var(--messenger-radius)]`),isHidden:t,onSubmit:a.closeEmojiPicker,children:[(0,k.jsx)(y,{inputAriaLabel:n.messages.message_aria_label,inputRef:r,placeholder:n.messages.interview_input_placeholder}),(0,k.jsxs)(S,{children:[(0,k.jsx)(v,{children:(0,k.jsx)(f,{hostRef:a.emojiPickerHostRef,isLoading:a.isEmojiPickerLoading,open:a.isEmojiPickerOpen,onOpenChange:a.onEmojiOpenChange,children:(0,k.jsx)(g,{emojiLabel:n.messages.add_emoji})})}),(0,k.jsx)(p,{sendLabel:n.messages.send_message})]})]})}function ie(){return(0,k.jsx)(`div`,{className:`mt-[var(--messenger-conversation-part-stack-gap)] flex max-w-[var(--messenger-conversation-part-max-width)] flex-col self-start items-start`,"data-message-role":`assistant`,"data-testid":`interview-thinking-bubble`,children:(0,k.jsx)(`div`,{className:`w-fit max-w-full whitespace-pre-wrap bg-gray-3 px-[var(--messenger-conversation-part-padding-x)] py-[var(--messenger-conversation-part-padding-y)] text-base leading-5 text-text-secondary`,style:F(`assistant`),children:(0,k.jsx)(L,{})})})}function L(){return(0,k.jsxs)(`span`,{className:`inline-flex h-5 items-center gap-1 align-middle text-text-quaternary`,"aria-hidden":`true`,children:[(0,k.jsx)(`span`,{className:`h-1.5 w-1.5 animate-[customer-agent-typing-dot-bounce_1.05s_ease-in-out_infinite] rounded-full bg-current`,"data-testid":`interview-thinking-dot`}),(0,k.jsx)(`span`,{className:`h-1.5 w-1.5 animate-[customer-agent-typing-dot-bounce_1.05s_ease-in-out_infinite] rounded-full bg-current [animation-delay:140ms]`,"data-testid":`interview-thinking-dot`}),(0,k.jsx)(`span`,{className:`h-1.5 w-1.5 animate-[customer-agent-typing-dot-bounce_1.05s_ease-in-out_infinite] rounded-full bg-current [animation-delay:280ms]`,"data-testid":`interview-thinking-dot`})]})}export{I as InterviewChatScreen};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=`0.5.9`;function t(){typeof window>`u`||(window.__customerAgentVersion=e)}var n=Object.freeze({BUG_REPORTED:`support.bug_reported`,CONVERSATION_CREATED:`conversation.created`,ERROR:`error`,FEEDBACK_SUBMITTED:`support.feedback_submitted`,HANDOFF_REQUESTED:`support.handoff_requested`,INTERVIEW_INVITATION_CLOSED:`interview.invitation_closed`,INTERVIEW_INVITATION_LATER:`interview.invitation_later`,INTERVIEW_INVITATION_SHOWN:`interview.invitation_shown`,INTERVIEW_AVAILABLE:`interview.available`,INTERVIEW_REWARD_UPDATED:`interview.reward_updated`,INTERVIEW_STATE_CHANGED:`interview.state_changed`,INTERVIEW_SESSION_COMPLETED:`interview.session_completed`,INTERVIEW_SESSION_STARTED:`interview.session_started`,MESSAGE_COMPLETED:`message.completed`,MESSAGE_FAILED:`message.failed`,MESSAGE_RETRY:`message.retry`,MESSAGE_SEND_FAILED:`message.send_failed`,MESSAGE_SENT:`message.sent`,MESSAGE_STARTED:`message.started`,SUPPORT_STATE_CHANGED:`support.state_changed`,TRANSCRIPT_DOWNLOADED:`transcript.downloaded`,WIDGET_CLOSED:`widget.closed`,WIDGET_COLLAPSED:`widget.collapsed`,WIDGET_EXPANDED:`widget.expanded`,WIDGET_OPENED:`widget.opened`,WIDGET_READY:`widget.ready`});export{t as n,n as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=class extends Error{code;requestId;status;constructor(e,t){super(e),this.name=`CustomerAgentApiError`,this.code=t.code,this.requestId=t.requestId??null,this.status=t.status}};function t(e){return e.replace(/\/+$/g,``)}function n(e){return!!e&&typeof e==`object`&&e.ok===!1&&typeof e.error?.message==`string`}function r(e){return!!e&&typeof e==`object`&&e.ok===!0}async function i(t){let n=await t.text();if(!n)return null;try{return JSON.parse(n)}catch{throw new e(`The server returned an unreadable response.`,{code:`INVALID_RESPONSE`,requestId:t.headers.get(`X-Request-Id`),status:t.status})}}function a(a){let o=t(a);async function s(t){let a=await i(t);if(n(a))throw new e(a.error.message,{code:a.error.code,requestId:a.meta?.requestId??t.headers.get(`X-Request-Id`),status:t.status});if(!t.ok)throw new e(`The server could not complete the request.`,{code:`HTTP_ERROR`,requestId:t.headers.get(`X-Request-Id`),status:t.status});if(!r(a))throw new e(`The server returned an unexpected response.`,{code:`INVALID_RESPONSE`,requestId:t.headers.get(`X-Request-Id`),status:t.status});return{data:a.data,response:t}}async function c(e,t={}){let n=new Headers;return t.method!==`GET`&&n.set(`Content-Type`,`application/json`),t.conversationId&&n.set(`X-Customer-Agent-Conversation-Id`,t.conversationId),await s(await fetch(`${o}${e}`,{body:t.body?JSON.stringify(t.body):void 0,credentials:`omit`,headers:n,method:t.method??`GET`,signal:t.signal}))}async function l(e,t,n={}){let r=new Headers;return n.conversationId&&r.set(`X-Customer-Agent-Conversation-Id`,n.conversationId),await s(await fetch(`${o}${e}`,{body:t,credentials:`omit`,headers:r,method:`POST`,signal:n.signal}))}return{request:c,upload:l}}function o(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`ca_${Date.now()}_${Math.random().toString(36).slice(2)}`}function s(){return`https://api.askorainsight.com/api/customer-agent`}function c(e,t){if(!e.app_id)throw Error(`CustomerAgent requires an app_id.`);let{launcher:n,mount:r,...i}=e;return{...i,context:e.context??{},embedded:!!r,launcher:n?{offset:n.offset,placement:n.placement,style:n.style,variables:n.variables}:void 0,widgetId:t}}function l(e){return typeof e==`string`&&e.trim()?e.trim():null}function u(e){let t=l(e.user?.id);return t?JSON.stringify({appId:e.app_id,userId:t}):null}function d(e){let t=u(e);return t?`customer_agent:interview_session:${encodeURIComponent(t)}`:null}function f(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.entryId==`string`&&typeof t.priority==`number`&&typeof t.sessionId==`string`&&typeof t.title==`string`}function p(e){return u(e)}function m(){return{clear(e){let t=d(e);if(t)try{window.localStorage.removeItem(t)}catch{}},read(e){let t=d(e);if(!t)return null;try{let e=window.localStorage.getItem(t);if(!e)return null;let n=JSON.parse(e);return f(n)?n:null}catch{return null}},write(e,t){let n=d(e);if(n)try{window.localStorage.setItem(n,JSON.stringify(t))}catch{}}}}var h=class extends Error{conversationId;constructor(e){super(`The support conversation session is no longer available.`),this.conversationId=e,this.name=`CustomerAgentSessionInvalidatedError`}};function g(e){return typeof e==`string`&&e.trim()?e.trim():null}function _(e){let t=g(e.user?.id),n=g(e.anonymous_id),r=t?`user:${t}`:n?`anonymous:${n}`:`anonymous`;return encodeURIComponent(r)}function v(e){return`customer_agent:conversation_id:${e.app_id}:${_(e)}`}function y(e){return`${e.app_id}::${_(e)}`}function b(e){try{return window.localStorage.getItem(v(e))}catch{return null}}function x(e,t){try{window.localStorage.setItem(v(e),t)}catch{}}function S(e){try{window.localStorage.removeItem(v(e))}catch{}}function C(){try{return window.parent?.location??window.location}catch{return window.location}}function w(){let e=C();return!e?.href||e.href===`about:blank`?{}:{customerOrigin:e.origin,pagePath:`${e.pathname}${e.search}${e.hash}`,pageUrl:e.href}}function T(){return{language:navigator.language,languages:navigator.languages,platform:navigator.platform,screen:{height:window.screen.height,width:window.screen.width},userAgent:navigator.userAgent,viewport:{height:window.innerHeight,width:window.innerWidth}}}function E(e){return Object.fromEntries(Object.entries(e).filter(e=>e[1]!==void 0))}function D(e){return Array.isArray(e)?`[${e.map(e=>D(e)).join(`,`)}]`:e&&typeof e==`object`?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${D(t)}`).join(`,`)}}`:JSON.stringify(e)}function O(e){return e.anonymous_id??e.user?.id}function k(e){return E({...e.context,...e.user,userId:e.user?.id,visitorId:O(e)})}function A(e){let t=k(e);return{appId:e.app_id,...E({...w(),deviceInfo:T(),locale:e.locale,userContext:Object.keys(t).length?t:void 0,visitorId:O(e),widgetId:e.widgetId})}}function j(e){return{id:e.id,role:e.role,content:e.content,createdAt:new Date(e.createdAt),metadata:{custom:{assistantAuthor:e.assistantAuthor,attachments:e.attachments??[]}},status:e.role===`assistant`?{type:`complete`,reason:`stop`}:void 0}}function M(e){return e.map(j)}var N=class{apiOrigin=null;client=null;lastContextFingerprint=null;session=null;sessionPromise=null;getClient(){let e=s();return(this.apiOrigin!==e||!this.client)&&(this.apiOrigin=e,this.client=a(e),this.lastContextFingerprint=null,this.session=null,this.sessionPromise=null),this.client}clear(e){this.lastContextFingerprint=null,this.session=null,this.sessionPromise=null,S(e)}hydrateSession(e,t){this.session={cacheKey:y(e),conversationId:t.conversationId,messages:t.messages},this.sessionPromise=null,x(e,t.conversationId)}async ensureSession(e,t={}){let n=y(e);if(this.session?.conversationId&&this.session.cacheKey===n)return this.session;if(this.session?.cacheKey!==n&&(this.lastContextFingerprint=null,this.session=null,this.sessionPromise=null),this.sessionPromise)return await this.sessionPromise;let r=b(e);this.sessionPromise=this.startSession(e,r,t);try{return this.session=await this.sessionPromise,this.session}finally{this.sessionPromise=null}}async sendMessage(t,n,r,i,a={}){let o=this.getHydratedSession(t)??await this.ensureSession(t,a);try{let e=await this.postMessage(t,o.conversationId,n,r,i);return this.session?.conversationId===e.conversationId&&(this.session={...this.session,messages:P(this.session.messages,[e.userMessage,e.assistantMessage])}),e}catch(s){if(s instanceof e&&s.code===`NOT_FOUND`){this.clear(t),a.onSessionInvalidated?.(o.conversationId);let e=await this.ensureSession(t,a),s=await this.postMessage(t,e.conversationId,n,r,i);return this.session={...e,messages:P(e.messages,[s.userMessage,s.assistantMessage])},s}throw s}}async refreshSession(t,n){let r=this.getHydratedSession(t);if(!r)return null;try{let{data:e}=await this.getClient().request(`/conversation`,{conversationId:r.conversationId,method:`GET`,signal:n});return this.session={...r,conversationId:e.conversationId,messages:e.messages},x(t,e.conversationId),this.session}catch(n){if(n instanceof e&&n.code===`NOT_FOUND`){let e=r.conversationId;throw this.clear(t),new h(e)}throw n}}async updateContext(e){let t=this.getHydratedSession(e);if(!t)return null;let n=A(e),r=D(n);if(r===this.lastContextFingerprint)return null;let{data:i}=await this.getClient().request(`/context`,{body:{...n,conversationId:t.conversationId},conversationId:t.conversationId,method:`PATCH`});return this.lastContextFingerprint=r,i}async uploadAttachment(e,t,n={}){let r=this.getHydratedSession(e);if(!r)throw Error(`The support conversation session has not been initialized.`);let i=new FormData;i.set(`appId`,e.app_id),i.set(`conversationId`,r.conversationId),i.set(`file`,t);let{data:a}=await this.getClient().upload(`/attachments`,i,{conversationId:r.conversationId});return{filename:a.filename,id:a.attachmentId,mimeType:a.mimeType,sizeBytes:a.sizeBytes,url:a.url}}async startSession(t,n,r={}){let i=this.getClient(),a=A(t);try{let{data:e}=await i.request(`/session`,{body:E({...a,conversationId:n??void 0}),conversationId:n,method:`POST`}),o=e.conversationId;return x(t,o),this.lastContextFingerprint=D(a),n||r.onConversationCreated?.(o),{cacheKey:y(t),conversationId:o,messages:e.messages}}catch(i){if(n&&i instanceof e&&i.code===`NOT_FOUND`)return S(t),await this.startSession(t,null,r);throw i}}async postMessage(e,t,n,r,i){let a=A(e),{data:o}=await this.getClient().request(`/messages`,{body:{...a,attachments:r.length?r:void 0,conversationId:t,message:n},conversationId:t,method:`POST`,signal:i});return this.lastContextFingerprint=D(a),o}getHydratedSession(e){let t=y(e);return this.session?.conversationId&&this.session.cacheKey===t?this.session:null}};function P(e,t){let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()]}var F=new N,I={AGENTS_CONVERSATIONS:`agents.conversations`,GLOBAL_ERROR:`global.error`,GLOBAL_LOADING:`global.loading`},L={CHAT:`chat`,INTERVIEW_STARTING:`interview.starting`},R=`interview/session/`,z=`support/session/`;function B(e,t){return e.startsWith(t)&&e.length>t.length}function V(e){return B(e,R)}function H(e){return`${z}${e}`}function U(e){return B(e,z)}function W(e){return U(e)?e.slice(16):null}function G(e){return!e||e.name!==I.AGENTS_CONVERSATIONS?!1:e.child.name===L.CHAT&&V(e.child.entryId)}function K(e){return{child:{entryId:e,name:L.CHAT},name:I.AGENTS_CONVERSATIONS}}export{c as _,G as a,a as b,I as c,M as d,F as f,o as g,u as h,V as i,h as l,p as m,H as n,U as o,m as p,W as r,L as s,K as t,A as u,s as v,e as y};
|