@telia-ace/ace-chat-flamingo 1.1.123-rc.15 → 1.1.123-rc.17

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 (3) hide show
  1. package/index.js +1 -1
  2. package/index.mjs +4 -3
  3. package/package.json +3 -3
package/index.js CHANGED
@@ -1352,7 +1352,7 @@ Please report this to https://github.com/markedjs/marked.`,n){const i="<p>An err
1352
1352
  width: 100%;
1353
1353
  }
1354
1354
  }
1355
- `];let ne=Fs;pe([T()],ne.prototype,"platform");pe([T()],ne.prototype,"entries");pe([T()],ne.prototype,"typing");pe([T()],ne.prototype,"message");pe([T()],ne.prototype,"disabledInput");pe([T()],ne.prototype,"disabledSkipToLatest");pe([T()],ne.prototype,"disabledSubmit");pe([T()],ne.prototype,"chatOverlayActive");pe([T()],ne.prototype,"textAreaLength");pe([T()],ne.prototype,"showAuthBanner");pe([T()],ne.prototype,"authenticated");var Te=(n=>(n.Tunnistus="tunnistus",n.BankId="bankid",n.Freja="freja",n))(Te||{}),H=(n=>(n.Pending="pending",n.Authenticated="authenticated",n.Error="error",n))(H||{});class Bt{constructor(e){this.orderRef="",e={...e,idHubEidType:typeof(e==null?void 0:e.idHubEidType)=="string"?e.idHubEidType.toLowerCase():e.idHubEidType},this.config=e,this.url=`${e==null?void 0:e.idHubUrl}/${e==null?void 0:e.idHubCustomerKey}/${e==null?void 0:e.idHubOrgKey}/${e==null?void 0:e.idHubEidType}`,this.maxRetries=e.idHubMaxRetries??300}async auth(){try{const e=await fetch(`${this.url}/auth`,{headers:Bt.getHeaders(),body:JSON.stringify({clientName:"idhub-web-1.0.0",register:{clientType:"ACEWIDGET",agentId:"ACEWIDGET",userName:"ACEWIDGET"}}),method:"POST"});if(!e.ok)return{status:H.Error,errorMessage:`Auth failed with response: ${e.status} ${e.statusText}`};const t=await e.json();switch(this.orderRef=t.orderRef,this.config.idHubEidType){case Te.Tunnistus:return{tunnistusURL:t.tunnistusURL,status:H.Pending};case Te.BankId:return{autoStartToken:t.autoStartToken,status:H.Pending};case Te.Freja:throw new Error(`${Te.Freja} is not implemented`);default:throw new Error(`The service ${this.config.idHubEidType} is not implemented`)}}catch(e){return{status:H.Error,errorMessage:`Auth failed. Error: ${e}`}}}async collect(){for(let e=0;e<this.maxRetries;e++){await new Promise(i=>setTimeout(i,1e3));const t=await this.collectOnce();if(t&&t.status!==H.Pending)return t}return{status:H.Error}}async cancel(){try{return this.orderRef?(await fetch(`${this.url}/cancel`,{headers:Bt.getHeaders(),body:JSON.stringify({clientName:"idhub-web-1.0.0",orderRef:this.orderRef,method:"auth"}),method:"POST"}),{}):{status:H.Error,errorMessage:"Missing order reference."}}catch(e){return{status:H.Error,errorMessage:`Cancel failed. Error: ${e}`}}}static getHeaders(){return{accept:"application/json","accept-language":"sv-SE,sv;q=0.9,en-US;q=0.8,en;q=0.7","content-type":"application/json"}}async collectOnce(){try{if(!this.orderRef)return{status:H.Error,errorMessage:"Missing order reference."};const e=await fetch(`${this.url}/collect`,{headers:Bt.getHeaders(),body:JSON.stringify({clientName:"idhub-web-1.0.0",orderRef:this.orderRef,method:"auth"}),method:"POST"});if(!e.ok)return{status:H.Error,errorMessage:`Collect failed with response: ${e.status} ${e.statusText}`};const t=await e.json();return t.status===H.Error?{status:H.Error,subStatus:t.subStatus??void 0}:t}catch(e){return{status:H.Error,errorMessage:`Collect failed. Error: ${e}`}}}}const Se=n=>n.objectType==="info",Id=n=>n.objectType==="chatEntry",Pd=n=>n.objectType==="pen",Md=n=>n.objectType==="chatButtonClicked",Nd=n=>n.objectType==="endVideoButtonClicked",Ud=n=>n.type==="queue-status",Dd=n=>n.type==="established",zd=n=>n.type==="pen-status",Hd=n=>n.type==="prepareVideo",jd=n=>n.type==="videoPrepared",Fd=n=>n.type==="chatButtonClicked",Bd=n=>n.type==="endVideoButtonClicked",qd=n=>n.type==="chat-ended";var Ze=(n=>(n.Initial="initial",n.Error="error",n.Retry="retry",n))(Ze||{});class Fn extends Error{constructor(e){super(e),this.name="EngineException"}}class Es{constructor(e,t){this.endpoint=e,this.timeout=t,this.protocolVersion="A",this.penStatusJustSent=!1}async chatJoin(e){var i,s,r;const t=await this.sendRequest("chatJoin",{invitationUid:e.invitationUid,uid:e.uid,instance:e.instance,protocolVersion:this.protocolVersion,videoChatMode:e.videoChatMode,customerName:e.customerName});if(!((i=t==null?void 0:t.dataObjects)!=null&&i.length)||((s=t==null?void 0:t.dataObjects[0])==null?void 0:s.infoType)==="error")throw t.dataObjects?new Error(`chatRequest - ${(r=t==null?void 0:t.dataObjects[0])==null?void 0:r.text}`):new Error("chatRequest - unknown error")}async chatRequest(e){var i,s,r,o,a;const t=await this.sendRequest("chatRequest",{...e.customData,uid:e.uid,instance:e.instance,queueMessageInterval:e.queueMessageInterval.toString(),protocolVersion:this.protocolVersion,entrance:e.entrance,errand:e.errand.length?e.errand:"997",videoChatMode:e.videoChatMode,customerName:e.customerName,customerEmailAddress:e.customerEmailAddress,visitorQuestion:e.visitorQuestion,visitorUserAgent:((i=window==null?void 0:window.navigator)==null?void 0:i.userAgent)||"",sourceUrl:((s=window==null?void 0:window.location)==null?void 0:s.href)||"",...e.authToken&&{authToken:e.authToken}});if(!((r=t==null?void 0:t.dataObjects)!=null&&r.length)||((o=t==null?void 0:t.dataObjects[0])==null?void 0:o.infoType)==="error")throw t.dataObjects?new Error(`chatRequest - ${(a=t==null?void 0:t.dataObjects[0])==null?void 0:a.text}`):new Error("chatRequest - unknown error")}async videoPrepared(e){await this.sendRequest("videoPrepared",{uid:e.uid,instance:e.instance,result:e.result,protocolVersion:this.protocolVersion})}chatRead(e){return this.sendRequest("chatRead",{uid:e.uid,instance:e.instance,entrance:e.entrance,maxObjectId:`${e.maxObjectId}`,protocolVersion:this.protocolVersion})}sendPenStatusOn(e){if(this.penStatusTimer&&clearTimeout(this.penStatusTimer),e.key==="Enter"){this.penStatusJustSent=!1;return}this.penStatusJustSent||(this.sendRequest("chatPenStatus",{uid:e.uid,instance:e.instance,penStatus:"on",protocolVersion:this.protocolVersion}),this.penStatusJustSent=!0,setTimeout(()=>{this.penStatusJustSent=!1},5e3)),this.penStatusTimer=setTimeout(()=>this.sendPenStatusOff(e),5e3)}sendPenStatusOff(e){this.penStatusJustSent&&clearTimeout(this.penStatusTimer),this.sendRequest("chatPenStatus",{uid:e.uid,instance:e.instance,penStatus:"off",protocolVersion:this.protocolVersion})}chatWrite(e){return this.sendPenStatusOff(e),this.sendRequest("chatWrite",{uid:e.uid,instance:e.instance,clockstamp:e.clockstamp,message:e.message,protocolVersion:this.protocolVersion})}async chatQuit(e){this.sendPenStatusOff(e),await this.sendRequest("chatQuit",{uid:e.uid,instance:e.instance,protocolVersion:this.protocolVersion})}async chatCheckSession(e){var i;const t=await this.sendRequest("chatCheckSession",{uid:e.uid,instance:e.instance,protocolVersion:this.protocolVersion});return Object.keys(t).length===0?null:((i=t.dataObjects)==null||i.sort((s,r)=>s.objectId-r.objectId),t)}async chatEmailSession(e){return this.sendRequest("chatEmailSession",{uid:e.uid,instance:e.instance,emailAddress:e.emailAddress,protocolVersion:this.protocolVersion})}async sendRequest(e,t){const i=this.endpoint.includes("engine-simulator")?"include":void 0,s=`${Es.removeTrailingSlashes(this.endpoint)}/${e}`,r=await fetch(s,{body:new URLSearchParams(t),method:"POST",credentials:i,headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"*/*"},signal:this.timeout?AbortSignal.timeout(this.timeout):void 0});return Number(r.headers.get("content-length"))>0?r.json():{}}static removeTrailingSlashes(e){return e.replace(/\/+$/,"")}}const Vd=()=>"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n=>(+n^crypto.getRandomValues(new Uint8Array(1))[0]&15>>+n/4).toString(16)),Ki=()=>typeof crypto.randomUUID=="function"?crypto.randomUUID():Vd();function Ji(n){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)}function Ya(n){return n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function Wd(n){return decodeURIComponent(atob(n).split("").map(e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)).join(""))}class Gd{constructor(e,t){this.config=e,this.messageSubject$=new P,this.actionsSubject$=new P,this.messages=()=>this.messageSubject$.asObservable(),this.actions=()=>this.actionsSubject$.asObservable(),this.sessionId="",this.lastObjectId=0,this.sessionId=t??Ki(),this.client=new Es(this.config.engineUrl,this.config.engineTimeout)}chatJoin(e){return Ye(this.client.chatJoin({invitationUid:e.invitationUid,uid:this.sessionId,customerName:e.customerName,instance:this.config.instance,videoChatMode:this.config.videoChatMode})).pipe(Pi(t=>(console.error(t),this.messageSubject$.next({text:this.config.errorMessage??"An error occured",source:"system"}),new j)),Oe(()=>this.poll().pipe(mi(()=>this.poll()),vi())))}chatRequest(e){return Ye(this.client.chatRequest({uid:this.sessionId,customerName:e.customerName,customerEmailAddress:e.customerEmailAddress,visitorQuestion:e.visitorQuestion,instance:this.config.instance,queueMessageInterval:this.config.queueMessageInterval,entrance:this.config.entrance,errand:e.errand,videoChatMode:this.config.videoChatMode,customData:e.customData,...e.authToken&&{authToken:e.authToken}})).pipe(Pi(t=>(console.error(t),this.messageSubject$.next({text:this.config.errorMessage??"An error occured",source:"system"}),new j)),Oe(()=>this.poll().pipe(mi(()=>this.poll()),vi())))}reconnect(){return this.poll().pipe(mi(()=>this.poll()),vi())}poll(){return ac(()=>Ye(this.client.chatRead({uid:this.sessionId,instance:this.config.instance,entrance:this.config.entrance,maxObjectId:this.lastObjectId})).pipe(gc(e=>{this.processMessages(e)})))}async chatWrite(e){const t=await this.client.chatWrite({uid:this.sessionId,instance:this.config.instance,clockstamp:Date.now().toString(),message:e}),i=((t==null?void 0:t.dataObjects)||[]).find(s=>Se(s)&&s.infoType==="error");if(i)throw new Fn(i.text||"Unable to send message")}sendPenStatusOn(e){this.client.sendPenStatusOn({uid:this.sessionId,instance:this.config.instance,key:e})}async videoPrepared(e){await this.client.videoPrepared({uid:this.sessionId,instance:this.config.instance,result:e})}async chatQuit(){await this.client.chatQuit({uid:this.sessionId,instance:this.config.instance})}async chatEmailSession(e){const t=await this.client.chatEmailSession({uid:this.sessionId,instance:this.config.instance,emailAddress:e});if(((t==null?void 0:t.dataObjects)||[]).find(s=>Se(s)&&s.infoType==="error"))throw new Fn("Unable to send email with conversation")}processMessages(e){e.dataObjects.forEach(t=>{Id(t)&&t.source&&t.objectId>=this.lastObjectId&&this.messageSubject$.next({text:t.message,source:t.source,invitationNo:t.invitationNo.toString(),alias:t.alias||t.agentAlias}),Pd(t)&&this.actionsSubject$.next({penStatus:t.penStatus,type:"pen-status"}),Se(t)&&t.infoType==="queue"&&this.actionsSubject$.next({text:t.text,type:"queue-status"}),Se(t)&&t.infoType==="established"&&this.actionsSubject$.next({text:t.text,agentAlias:t.agentAlias,type:"established",videoEnded:t.videoEnded,contactId:t.contactId,agentUsername:t.agentUsername,entrance:t.entrance,errand:t.errand}),Se(t)&&t.infoType==="prepareVideo"&&this.actionsSubject$.next({type:"prepareVideo"}),Se(t)&&t.infoType==="videoPrepared"&&this.actionsSubject$.next({text:t.text,agent:t.agent,type:"videoPrepared",userUrl:t.userUrl}),Md(t)&&this.actionsSubject$.next({guestId:t.guestId,type:"chatButtonClicked"}),Nd(t)&&this.actionsSubject$.next({guestId:t.guestId,type:"endVideoButtonClicked"}),Se(t)&&["afterChat","finished"].includes(t.infoType)&&this.actionsSubject$.next({text:t.text,type:"chat-ended",showForm:t.infoType==="afterChat",contactId:t.contactId})}),this.lastObjectId=e.maxObjectId}async getChatStatus(){const e=await this.client.chatCheckSession({uid:this.sessionId,instance:this.config.instance});if(!e)return"noSession";const t=e.dataObjects;for(const i of t)if(Se(i))switch(i.infoType){case"finished":case"afterChat":return"finished";case"noSession":return"noSession"}return"active"}async rehydrate(){const e=await this.client.chatCheckSession({uid:this.sessionId,instance:this.config.instance});return!e||(e.dataObjects||[]).find(t=>Se(t)&&t.infoType==="noSession")?null:(this.processMessages(e),e)}}class Ne{constructor(e){this._email="",this._host=e,e.addController(this)}static getInstance(e){return Ne.instance?Ne.instance.updateHost(e):Ne.instance=new Ne(e),Ne.instance}updateHost(e){this._host=e,e.addController(this)}hostConnected(){}set email(e){this._email=e,this._host.requestUpdate()}get email(){return this._email}clearData(){this._email="",this._host.requestUpdate()}}var Zd=Object.defineProperty,Et=(n,e,t,i)=>{for(var s=void 0,r=n.length-1,o;r>=0;r--)(o=n[r])&&(s=o(e,t,s)||s);return s&&Zd(e,t,s),s},bt;let it=(bt=class extends A{constructor(){super(),this.submitted=!1,this.customData=[],this.customerName="",this.validationErrors=[],this.showValidationWarning=!1,this.emailController=Ne.getInstance(this),this.emailController.clearData()}connectedCallback(){var i,s;super.connectedCallback();const e=this.application.settings.components.conversation,t=((s=(i=e==null?void 0:e.properties)==null?void 0:i.chat)==null?void 0:s.customData)??[];this.customData=t.map(r=>{let o;switch(r.entryType){case"text":case"dropdown":o="";break;case"number":o=0;break;case"boolean":o=!1;break}return{...r,value:o}})}_onStartChat(e){if(e.preventDefault(),this.showValidationWarning=!1,this.customData.forEach(l=>{this.validateCustomDataEntry(l)}),this.validationErrors.length>0){this.showValidationWarning=!0;return}this.submitted=!0;const t=this.customData.find(l=>l.name==="customerEmailAddress");t&&(this.emailController.email=t.value);const i=this.customData.reduce((l,u)=>(l[u.name]=u.value,l),{}),{customerName:s,customerEmailAddress:r,visitorQuestion:o,...a}=i,c=new CustomEvent("action",{bubbles:!0,composed:!0,detail:{key:"submitted",data:{name:s,email:r,question:o,customData:a}}});this.dispatchEvent(c)}_customDataValueChanged(e,t){this.customData=this.customData.map(i=>(i.name===t.name&&(i.value=e),i))}validateCustomDataEntry(e){e.required&&(e.name==="customerEmailAddress"&&!Ji(e.value)||!e.value?this.validationErrors.includes(e.name)||this.validationErrors.push(e.name):this.validationErrors=this.validationErrors.filter(t=>t!==e.name))}render(){if(this.submitted)return w;const e=this.application.texts;return y`<div class="container">
1355
+ `];let ne=Fs;pe([T()],ne.prototype,"platform");pe([T()],ne.prototype,"entries");pe([T()],ne.prototype,"typing");pe([T()],ne.prototype,"message");pe([T()],ne.prototype,"disabledInput");pe([T()],ne.prototype,"disabledSkipToLatest");pe([T()],ne.prototype,"disabledSubmit");pe([T()],ne.prototype,"chatOverlayActive");pe([T()],ne.prototype,"textAreaLength");pe([T()],ne.prototype,"showAuthBanner");pe([T()],ne.prototype,"authenticated");var Te=(n=>(n.Tunnistus="tunnistus",n.BankId="bankid",n.Freja="freja",n))(Te||{}),H=(n=>(n.Pending="pending",n.Authenticated="authenticated",n.Error="error",n))(H||{});class Bt{constructor(e){this.orderRef="",e={...e,idHubEidType:typeof(e==null?void 0:e.idHubEidType)=="string"?e.idHubEidType.toLowerCase():e.idHubEidType},this.config=e,this.url=`${e==null?void 0:e.idHubUrl}/${e==null?void 0:e.idHubCustomerKey}/${e==null?void 0:e.idHubOrgKey}/${e==null?void 0:e.idHubEidType}`,this.maxRetries=e.idHubMaxRetries??300}async auth(){try{const e=await fetch(`${this.url}/auth`,{headers:Bt.getHeaders(),body:JSON.stringify({clientName:"idhub-web-1.0.0",register:{clientType:"ACEWIDGET",agentId:"ACEWIDGET",userName:"ACEWIDGET"}}),method:"POST"});if(!e.ok)return{status:H.Error,errorMessage:`Auth failed with response: ${e.status} ${e.statusText}`};const t=await e.json();switch(this.orderRef=t.orderRef,this.config.idHubEidType){case Te.Tunnistus:return{tunnistusURL:t.tunnistusURL,status:H.Pending};case Te.BankId:return{autoStartToken:t.autoStartToken,status:H.Pending};case Te.Freja:throw new Error(`${Te.Freja} is not implemented`);default:throw new Error(`The service ${this.config.idHubEidType} is not implemented`)}}catch(e){return{status:H.Error,errorMessage:`Auth failed. Error: ${e}`}}}async collect(){for(let e=0;e<this.maxRetries;e++){await new Promise(i=>setTimeout(i,1e3));const t=await this.collectOnce();if(t&&t.status!==H.Pending)return t}return{status:H.Error}}async cancel(){try{return this.orderRef?(await fetch(`${this.url}/cancel`,{headers:Bt.getHeaders(),body:JSON.stringify({clientName:"idhub-web-1.0.0",orderRef:this.orderRef,method:"auth"}),method:"POST"}),{}):{status:H.Error,errorMessage:"Missing order reference."}}catch(e){return{status:H.Error,errorMessage:`Cancel failed. Error: ${e}`}}}static getHeaders(){return{accept:"application/json","accept-language":"sv-SE,sv;q=0.9,en-US;q=0.8,en;q=0.7","content-type":"application/json"}}async collectOnce(){try{if(!this.orderRef)return{status:H.Error,errorMessage:"Missing order reference."};const e=await fetch(`${this.url}/collect`,{headers:Bt.getHeaders(),body:JSON.stringify({clientName:"idhub-web-1.0.0",orderRef:this.orderRef,method:"auth"}),method:"POST"});if(!e.ok)return{status:H.Error,errorMessage:`Collect failed with response: ${e.status} ${e.statusText}`};const t=await e.json();return t.status===H.Error?{status:H.Error,subStatus:t.subStatus??void 0}:t}catch(e){return{status:H.Error,errorMessage:`Collect failed. Error: ${e}`}}}}const Se=n=>n.objectType==="info",Id=n=>n.objectType==="chatEntry",Pd=n=>n.objectType==="pen",Md=n=>n.objectType==="chatButtonClicked",Nd=n=>n.objectType==="endVideoButtonClicked",Ud=n=>n.type==="queue-status",Dd=n=>n.type==="established",zd=n=>n.type==="pen-status",Hd=n=>n.type==="prepareVideo",jd=n=>n.type==="videoPrepared",Fd=n=>n.type==="chatButtonClicked",Bd=n=>n.type==="endVideoButtonClicked",qd=n=>n.type==="chat-ended";var Ze=(n=>(n.Initial="initial",n.Error="error",n.Retry="retry",n))(Ze||{});class Fn extends Error{constructor(e){super(e),this.name="EngineException"}}class Es{constructor(e,t){this.endpoint=e,this.timeout=t,this.protocolVersion="A",this.penStatusJustSent=!1}async chatJoin(e){var i,s,r;const t=await this.sendRequest("chatJoin",{invitationUid:e.invitationUid,uid:e.uid,instance:e.instance,protocolVersion:this.protocolVersion,videoChatMode:e.videoChatMode,customerName:e.customerName});if(!((i=t==null?void 0:t.dataObjects)!=null&&i.length)||((s=t==null?void 0:t.dataObjects[0])==null?void 0:s.infoType)==="error")throw t.dataObjects?new Error(`chatRequest - ${(r=t==null?void 0:t.dataObjects[0])==null?void 0:r.text}`):new Error("chatRequest - unknown error")}async chatRequest(e){var i,s,r,o,a;const t=await this.sendRequest("chatRequest",{...e.customData,uid:e.uid,instance:e.instance,queueMessageInterval:e.queueMessageInterval.toString(),protocolVersion:this.protocolVersion,entrance:e.entrance,errand:e.errand.length?e.errand:"997",videoChatMode:e.videoChatMode,customerName:e.customerName,customerEmailAddress:e.customerEmailAddress,visitorQuestion:e.visitorQuestion,visitorUserAgent:((i=window==null?void 0:window.navigator)==null?void 0:i.userAgent)||"",sourceUrl:((s=window==null?void 0:window.location)==null?void 0:s.href)||"",...e.authToken&&{authToken:e.authToken}});if(!((r=t==null?void 0:t.dataObjects)!=null&&r.length)||((o=t==null?void 0:t.dataObjects[0])==null?void 0:o.infoType)==="error")throw t.dataObjects?new Error(`chatRequest - ${(a=t==null?void 0:t.dataObjects[0])==null?void 0:a.text}`):new Error("chatRequest - unknown error")}async videoPrepared(e){await this.sendRequest("videoPrepared",{uid:e.uid,instance:e.instance,result:e.result,protocolVersion:this.protocolVersion})}chatRead(e){return this.sendRequest("chatRead",{uid:e.uid,instance:e.instance,entrance:e.entrance,maxObjectId:`${e.maxObjectId}`,protocolVersion:this.protocolVersion})}sendPenStatusOn(e){if(this.penStatusTimer&&clearTimeout(this.penStatusTimer),e.key==="Enter"){this.penStatusJustSent=!1;return}this.penStatusJustSent||(this.sendRequest("chatPenStatus",{uid:e.uid,instance:e.instance,penStatus:"on",protocolVersion:this.protocolVersion}),this.penStatusJustSent=!0,setTimeout(()=>{this.penStatusJustSent=!1},5e3)),this.penStatusTimer=setTimeout(()=>this.sendPenStatusOff(e),5e3)}sendPenStatusOff(e){this.penStatusJustSent&&clearTimeout(this.penStatusTimer),this.sendRequest("chatPenStatus",{uid:e.uid,instance:e.instance,penStatus:"off",protocolVersion:this.protocolVersion})}chatWrite(e){return this.sendPenStatusOff(e),this.sendRequest("chatWrite",{uid:e.uid,instance:e.instance,clockstamp:e.clockstamp,message:e.message,protocolVersion:this.protocolVersion})}async chatQuit(e){this.sendPenStatusOff(e),await this.sendRequest("chatQuit",{uid:e.uid,instance:e.instance,protocolVersion:this.protocolVersion})}async chatCheckSession(e){var i;const t=await this.sendRequest("chatCheckSession",{uid:e.uid,instance:e.instance,protocolVersion:this.protocolVersion});return Object.keys(t).length===0?null:((i=t.dataObjects)==null||i.sort((s,r)=>s.objectId-r.objectId),t)}async chatEmailSession(e){return this.sendRequest("chatEmailSession",{uid:e.uid,instance:e.instance,emailAddress:e.emailAddress,protocolVersion:this.protocolVersion})}async sendRequest(e,t){const i=this.endpoint.includes("engine-simulator")?"include":void 0,s=`${Es.removeTrailingSlashes(this.endpoint)}/${e}`,r=await fetch(s,{body:new URLSearchParams(t),method:"POST",credentials:i,headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"*/*"},signal:this.timeout?AbortSignal.timeout(this.timeout):void 0});return Number(r.headers.get("content-length"))>0?r.json():{}}static removeTrailingSlashes(e){return e.replace(/\/+$/,"")}}const Vd=()=>"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n=>(+n^crypto.getRandomValues(new Uint8Array(1))[0]&15>>+n/4).toString(16)),Ki=()=>typeof crypto.randomUUID=="function"?crypto.randomUUID():Vd();function Ji(n){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)}function Ya(n){return n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function Wd(n){return decodeURIComponent(atob(n).split("").map(e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)).join(""))}class Gd{constructor(e,t){this.config=e,this.messageSubject$=new P,this.actionsSubject$=new P,this.messages=()=>this.messageSubject$.asObservable(),this.actions=()=>this.actionsSubject$.asObservable(),this.sessionId="",this.lastObjectId=0,this.sessionId=t??Ki(),this.client=new Es(this.config.engineUrl,this.config.engineTimeout)}chatJoin(e){return Ye(this.client.chatJoin({invitationUid:e.invitationUid,uid:this.sessionId,customerName:e.customerName,instance:this.config.instance,videoChatMode:this.config.videoChatMode})).pipe(Pi(t=>(console.error(t),this.messageSubject$.next({text:this.config.errorMessage??"An error occured",source:"system"}),new j)),Oe(()=>this.poll().pipe(mi(()=>this.poll()),vi())))}chatRequest(e){return Ye(this.client.chatRequest({uid:this.sessionId,customerName:e.customerName,customerEmailAddress:e.customerEmailAddress,visitorQuestion:e.visitorQuestion,instance:this.config.instance,queueMessageInterval:this.config.queueMessageInterval,entrance:this.config.entrance,errand:e.errand,videoChatMode:this.config.videoChatMode,customData:e.customData,...e.authToken&&{authToken:e.authToken}})).pipe(Pi(t=>(console.error(t),this.messageSubject$.next({text:this.config.errorMessage??"An error occured",source:"system"}),new j)),Oe(()=>this.poll().pipe(mi(()=>this.poll()),vi())))}reconnect(){return this.poll().pipe(mi(()=>this.poll()),vi())}poll(){return ac(()=>Ye(this.client.chatRead({uid:this.sessionId,instance:this.config.instance,entrance:this.config.entrance,maxObjectId:this.lastObjectId})).pipe(gc(e=>{this.processMessages(e)})))}async chatWrite(e){const t=await this.client.chatWrite({uid:this.sessionId,instance:this.config.instance,clockstamp:Date.now().toString(),message:e}),i=((t==null?void 0:t.dataObjects)||[]).find(s=>Se(s)&&s.infoType==="error");if(i)throw new Fn(i.text||"Unable to send message")}sendPenStatusOn(e){this.client.sendPenStatusOn({uid:this.sessionId,instance:this.config.instance,key:e})}async videoPrepared(e){await this.client.videoPrepared({uid:this.sessionId,instance:this.config.instance,result:e})}async chatQuit(){await this.client.chatQuit({uid:this.sessionId,instance:this.config.instance})}async chatEmailSession(e){const t=await this.client.chatEmailSession({uid:this.sessionId,instance:this.config.instance,emailAddress:e});if(((t==null?void 0:t.dataObjects)||[]).find(s=>Se(s)&&s.infoType==="error"))throw new Fn("Unable to send email with conversation")}processMessages(e){e.dataObjects.forEach(t=>{Id(t)&&t.source&&t.objectId>=this.lastObjectId&&this.messageSubject$.next({text:t.message,source:t.source,invitationNo:t.invitationNo.toString(),alias:t.alias||t.agentAlias}),Pd(t)&&this.actionsSubject$.next({penStatus:t.penStatus,type:"pen-status"}),Se(t)&&t.infoType==="queue"&&this.actionsSubject$.next({text:t.text,type:"queue-status"}),Se(t)&&t.infoType==="established"&&this.actionsSubject$.next({text:t.text,agentAlias:t.agentAlias,type:"established",videoEnded:t.videoEnded,contactId:t.contactId,agentUsername:t.agentUsername,entrance:t.entrance,errand:t.errand}),Se(t)&&t.infoType==="prepareVideo"&&this.actionsSubject$.next({type:"prepareVideo"}),Se(t)&&t.infoType==="videoPrepared"&&this.actionsSubject$.next({text:t.text,agent:t.agent,type:"videoPrepared",userUrl:t.userUrl}),Md(t)&&this.actionsSubject$.next({guestId:t.guestId,type:"chatButtonClicked"}),Nd(t)&&this.actionsSubject$.next({guestId:t.guestId,type:"endVideoButtonClicked"}),Se(t)&&["afterChat","finished"].includes(t.infoType)&&this.actionsSubject$.next({text:t.text,type:"chat-ended",showForm:t.infoType==="afterChat",contactId:t.contactId})}),this.lastObjectId=e.maxObjectId}async getChatStatus(){const e=await this.client.chatCheckSession({uid:this.sessionId,instance:this.config.instance});if(!e)return"noSession";const t=e.dataObjects;for(const i of t)if(Se(i))switch(i.infoType){case"finished":case"afterChat":return"finished";case"noSession":return"noSession"}return"active"}async rehydrate(){const e=await this.client.chatCheckSession({uid:this.sessionId,instance:this.config.instance});return!e||(e.dataObjects||[]).find(t=>Se(t)&&t.infoType==="noSession")?null:(this.processMessages(e),e)}}class Ne{constructor(e){this._email="",this._host=e,e.addController(this)}static getInstance(e){return Ne.instance?Ne.instance.updateHost(e):Ne.instance=new Ne(e),Ne.instance}updateHost(e){this._host=e,e.addController(this)}hostConnected(){}set email(e){this._email=e,this._host.requestUpdate()}get email(){return this._email}clearData(){this._email="",this._host.requestUpdate()}}var Zd=Object.defineProperty,Et=(n,e,t,i)=>{for(var s=void 0,r=n.length-1,o;r>=0;r--)(o=n[r])&&(s=o(e,t,s)||s);return s&&Zd(e,t,s),s},bt;let it=(bt=class extends A{constructor(){super(),this.submitted=!1,this.customData=[],this.customerName="",this.validationErrors=[],this.showValidationWarning=!1,this.emailController=Ne.getInstance(this),this.emailController.clearData()}connectedCallback(){var i,s;super.connectedCallback();const e=this.application.settings.components.conversation,t=((s=(i=e==null?void 0:e.properties)==null?void 0:i.chat)==null?void 0:s.customData)??[];this.customData=t.map(r=>{let o;switch(r.entryType){case"text":case"dropdown":o="";break;case"number":o=0;break;case"boolean":o=!1;break}return{...r,value:o}})}_onStartChat(e){if(e.preventDefault(),this.showValidationWarning=!1,this.customData.forEach(l=>{this.validateCustomDataEntry(l)}),this.validationErrors.length>0){this.showValidationWarning=!0;return}this.submitted=!0;const t=this.customData.find(l=>l.name==="customerEmailAddress");t&&(this.emailController.email=t.value);const i=this.customData.reduce((l,u)=>(l[u.name]=u.value,l),{}),{customerName:s,customerEmailAddress:r,visitorQuestion:o,...a}=i,c=new CustomEvent("action",{bubbles:!0,composed:!0,detail:{key:"submitted",data:{name:s,email:r,question:o,customData:a}}});this.dispatchEvent(c)}_customDataValueChanged(e,t){this.customData=this.customData.map(i=>(i.name===t.name&&(i.value=e),i))}validateCustomDataEntry(e){let t=!1;e.name==="customerEmailAddress"&&e.value&&(Ji(e.value)||(t=!0)),e.required&&!e.value&&(t=!0),t?this.validationErrors.includes(e.name)||this.validationErrors.push(e.name):this.validationErrors=this.validationErrors.filter(i=>i!==e.name)}render(){if(this.submitted)return w;const e=this.application.texts;return y`<div class="container">
1356
1356
  <form class="form" @submit=${this._onStartChat}>
1357
1357
  <div class="header-row">
1358
1358
  <telia-icon class="header-icon" svg=${ta.svg}></telia-icon>
package/index.mjs CHANGED
@@ -8381,9 +8381,10 @@ let it = (bt = class extends A {
8381
8381
  this.customData = this.customData.map((i) => (i.name === t.name && (i.value = e), i));
8382
8382
  }
8383
8383
  validateCustomDataEntry(e) {
8384
- e.required && (e.name === "customerEmailAddress" && !Ji(e.value) || !e.value ? this.validationErrors.includes(e.name) || this.validationErrors.push(e.name) : this.validationErrors = this.validationErrors.filter(
8385
- (t) => t !== e.name
8386
- ));
8384
+ let t = !1;
8385
+ e.name === "customerEmailAddress" && e.value && (Ji(e.value) || (t = !0)), e.required && !e.value && (t = !0), t ? this.validationErrors.includes(e.name) || this.validationErrors.push(e.name) : this.validationErrors = this.validationErrors.filter(
8386
+ (i) => i !== e.name
8387
+ );
8387
8388
  }
8388
8389
  render() {
8389
8390
  if (this.submitted)
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@telia-ace/ace-chat-flamingo",
3
- "version": "1.1.123-rc.15",
3
+ "version": "1.1.123-rc.17",
4
4
  "dependencies": {
5
- "@telia-ace/widget-core-flamingo": "1.1.123-rc.15",
6
- "@telia-ace/widget-conversation-flamingo": "1.1.123-rc.15",
5
+ "@telia-ace/widget-core-flamingo": "1.1.123-rc.17",
6
+ "@telia-ace/widget-conversation-flamingo": "1.1.123-rc.17",
7
7
  "rxjs": "^7.8.2",
8
8
  "lit": "^3.0.2",
9
9
  "@teliads/icons": "^8.4.0",