/*! * widgets * @version: 9.0.018.10 * @copyright: Copyright © 2024 Genesys. All rights reserved. * @license: Genesys Telecom Labs */ widgetsJsonpFunction([22],{"./webapp/plugins/cx-webchat-service/transports/pure-cloud-v2-sockets-transport.js":function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){var n={};for(var o in e)t.indexOf(o)>=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}var a=function(){function e(e,t){for(var n=0;n0&&(e=e.map(function(e){return delete e.iTempIndex,e})),o.length>0&&l.messagesInSync(o,e)&&n.onMessageReceived({data:{originalMessages:e,messages:o,restoring:n.bRestoring,oldMessages:t&&"fetchHistory"==t.type}})},checkChatIndexHash:function(e){var t=l.transport;return!t.oChatIndexHash[e]&&(t.oChatIndexHash[e]=!0,!0)},sendBotConnected:function(e,t){var n=l.transport;l.postMessageWithTimestamp({type:"ParticipantJoined",index:t?t.index:0,timestamp:t?t.timestamp:Date.now(),from:{type:"Bot"}}),n.onBotConnected({message:e,agents:n.oAgents})},sendBotDisconnected:function(e,t){var n=l.transport;l.postMessageWithTimestamp({type:"ParticipantLeft",index:t?t.index:"",timestamp:t?t.timestamp:Date.now(),from:{type:"Bot"}}),n.onBotDisconnected({message:e,agents:n.oAgents})},parseMessageForEvents:function(e,t){var n=l.transport,o=t||{},s=o.type,r=!(!s||"restore"!==s&&"fetchHistory"!==s),a=!(!s||"offlineMessages"!==s),i={};if(e&&e.state){var c=e.state,d=e.role,g=e.sender.id,u={};if(n.oPresences&&Object.keys(n.oPresences).length&&(u=n.oPresences.filter(function(e){return e.id==g}),u=u[0]),"CONNECTED"==c){var p={};switch("AGENT"==d&&n.oAgents[g]&&(p=m.default.extend(!0,{},n.oAgents),n.oAgents[g].connected=!0,n.oAgents[g].supervisor=!1,n.oAgents[g].connectedTime=e.joinDate||u&&Object.keys(u).length?new Date(u.joinDate).getTime():"",p[g].connected=!0,p[g].supervisor=!1,p[g].connectedTime=e.joinDate||u&&Object.keys(u).length?new Date(u.joinDate).getTime():"",n.oCacheAgents[g]=JSON.parse(JSON.stringify(n.oAgents[g]))),i={message:e,agents:p},d){case"AGENT":l.checkEventChanged(g,c)&&n.onAgentConnected(i);break;case"CUSTOMER":l.checkEventChanged(g,c)&&n.onClientConnected(i);break;case"WORKFLOW":n.botEventsEnabled&&l.checkEventChanged(g,c)&&n.onBotConnected(i)}}else if("DISCONNECTED"==c){var f={};switch("AGENT"==d&&n.oAgents[g]&&(f=m.default.extend(!0,{},n.oAgents),n.oAgents[g].connected=!1,n.oAgents[g].disconnectedTime=e.leaveDate||u&&Object.keys(u).length&&u.leaveDate?new Date(u.leaveDate).getTime():new Date(e.timestamp).getTime(),f[g].connected=!1,f[g].disconnectedTime=e.leaveDate||u&&Object.keys(u).length&&u.leaveDate?new Date(u.leaveDate).getTime():new Date(e.timestamp).getTime()),i={message:e,agents:f},d){case"AGENT":n.onAgentDisconnected(i),n.onAgentTypingStopped(i);break;case"CUSTOMER":n.onClientDisconnected(i);break;case"WORKFLOW":n.botEventsEnabled&&n.onBotDisconnected(i)}}(r||a)&&(n.oMembers[g]=e,n.oMembers[g].lastEvent=c)}},parseFormatmessage:function(e,t){var n=l.transport,o=new Date(e.timestamp||e.joinDate||e.leaveDate).getTime(),s=t||{},r=s.type,a=!(!r||"restore"!==r&&"fetchHistory"!==r),i=!(!r||"offlineMessages"!==r),c={},d={};if(c.type=n.webSocketStateMapping[e.bodyType]||"Message","Message"===c.type&&(c.text=e.body),c.restoring=n.bRestoring,c.index=o,e.iTempIndex=o,c.timestamp=o,c.id=e.id,n.oPresences&&Object.keys(n.oPresences).length){d=n.oPresences.filter(function(t){return t.id==e.sender.id});for(var m=0;m=12e3?t.iAjaxTimeout:12e3,this.oCommonRequestOption={timeout:this.ajaxTimeout,crossDomain:!0,dataType:"json",contentType:"application/json"},this.conversationOptions={deploymentId:"",organizationId:"",routingTarget:{targetAddress:""},memberInfo:{displayName:"Customer",role:"CUSTOMER",customFields:{}}},this.oMapping={"form.firstname":{target:"memberInfo.customFields.firstName",type:"string"},"form.lastname":{target:"memberInfo.customFields.lastName",type:"string"},"form.email":{target:"memberInfo.customFields.email",type:"string"},"form.subject":{target:"memberInfo.customFields.subject",type:"string"},"userData.phone":{target:"memberInfo.customFields.phoneNumber",type:"string"},"interactionData.userData.phone":{target:"memberInfo.customFields.phoneNumber",type:"string"},"interactionData.routing.targetType":{target:"routingTarget.targetType",type:"string",default:"QUEUE"},"interactionData.routing.targetAddress":{target:"routingTarget.targetAddress",type:"string"},"interactionData.routing.skills":{target:"routingTarget.skills"},"interactionData.routing.priority":{target:"routingTarget.priority",type:"number"},"interactionData.routing.language":{target:"routingTarget.language",type:"string"},"interactionData.journey.customerId":{target:"journeyContext.customer.id",type:"string"},"interactionData.journey.customerIdType":{target:"journeyContext.customer.idType",type:"string"},"interactionData.journey.sessionId":{target:"journeyContext.customerSession.id",type:"string"},"interactionData.journey.sessionType":{target:"journeyContext.customerSession.type",type:"string"},"interactionData.journey.actionId":{target:"journeyContext.triggeringAction.id",type:"string"},"interactionData.journey.actionMapId":{target:"journeyContext.triggeringAction.actionMap.id",type:"string"},"interactionData.journey.actionMapVersion":{target:"journeyContext.triggeringAction.actionMap.version",type:"number"}},this.webSocketStateMapping={"member-join":"ParticipantJoined","member-leave":"ParticipantLeft",standard:"Message",notice:"Message"},this.stateMapping={ParticipantJoined:"CONNECTED",ParticipantLeft:"DISCONNECTED"},this.oSessionData={jwt:"",conversationId:"",memberId:"",displayName:"",WebSocketUrl:"",nextMsgURL:"",lastMessageId:""},this.customerId="",this.bSocketConnectionLost=!1,this.socketReconnectInterval=2e3,this.socketHeartbeatTrackerInterval=14e3,this.socketConnectionCloseTime=2,this.capabilities={pagination:!0,fileUpload:!1},"object"==i(t.transport)){var n=t.transport;"string"==typeof n.type&&(this.transportType=n.type),"string"==typeof n.dataURL&&(this.dataURL=n.dataURL),"string"==typeof n.deploymentKey&&(this.conversationOptions.deploymentId=n.deploymentKey),"string"!=typeof n.organizationId&&"string"!=typeof n.orgGuid||(this.conversationOptions.organizationId=n.organizationId||n.orgGuid),"number"==typeof n.socketReconnectInterval&&(this.socketReconnectInterval=n.socketReconnectInterval),"number"==typeof n.socketHeartbeatTrackerInterval&&(this.socketHeartbeatTrackerInterval=n.socketHeartbeatTrackerInterval),"boolean"==typeof n.pagination&&(this.capabilities.pagination=n.pagination),"number"==typeof n.maxMessagePageSize&&(this.maxMessagePageSize=n.maxMessagePageSize),"boolean"==typeof n.botEventsEnabled&&(this.botEventsEnabled=n.botEventsEnabled),"number"==typeof n.socketConnectionCloseTime&&(this.socketConnectionCloseTime=n.socketConnectionCloseTime),this.conversationOptions=u.default.mapProperties(this.oMapping,n,this.conversationOptions)}this.sCookie_Keys=t.sCookie_Prefix+"."+this.transportType+".JWtoken",this.sCookie_ConversationID=t.sCookie_Prefix+"."+this.transportType+".ConversationID",this.sCookie_MemberID=t.sCookie_Prefix+"."+this.transportType+".MemberID",this.sCookie_WS_URL=t.sCookie_Prefix+"."+this.transportType+".WS_URL",this.sLastMessageId=t.sCookie_Prefix+"."+this.transportType+".LastMsgId",this.onChatStarted=this.onChatStarted.bind(this),this.onMessageReceived=this.onMessageReceived.bind(this),this.onRestore=this.onRestore.bind(this),this.onError=this.onError.bind(this),this.agentMsgFormat={type:"",text:"",restoring:!1,index:0,timestamp:0,from:{type:"Agent"}},this.conversationStarted={type:"ParticipantJoined",text:"",restoring:!1,index:0,timestamp:0,from:{type:"Client"}},this.iAgentTypingTimer=3e3,this.iAgentTypingTimeout=!1,this.fWatchMembers=!1,this.iWatchMembers=700,l.init(this)}return a(e,[{key:"onChatStarted",value:function(e,t){}},{key:"onTypingStarted",value:function(e){}},{key:"onCapabilitiesChanged",value:function(e){}},{key:"onAgentTypingStarted",value:function(e){}},{key:"onAgentTypingTimeout",value:function(e){}},{key:"onMessageReceived",value:function(e){}},{key:"onChatEnded",value:function(e){}},{key:"onError",value:function(e){}},{key:"onRestore",value:function(e){}},{key:"onRestoreFailed",value:function(e){}},{key:"startChat",value:function(e){var t=m.default.Deferred(),n=this,o="",s=JSON.parse(JSON.stringify(n.conversationOptions)),r=l.getFormData(e.form);return s.memberInfo.customFields=m.default.extend(s.memberInfo.customFields,r,e.userData||{},!0),s.memberInfo.displayName=l.getNickname(r),"string"==typeof e.deploymentKey&&(s.deploymentId=e.deploymentKey),"string"!=typeof e.organizationId&&"string"!=typeof e.orgGuid||(s.organizationId=e.organizationId||e.orgGuid),n.oInteractionData&&Object.keys(n.oInteractionData).length>0&&(o=n.oInteractionData),e&&e.interactionData&&Object.keys(e.interactionData).length>0&&(o=e.interactionData),o&&(s.memberInfo.customFields=m.default.extend(s.memberInfo.customFields,o.userData||{},!0),s=u.default.mapProperties(n.oMapping,{interactionData:o,userData:s.memberInfo.customFields},s)),n.bSessionActive||n.bOpeningSocket||(n.bOpeningSocket=!0,u.default.request(c({},n.oCommonRequestOption,{type:"POST",url:l.CreateUrl("/api/v2/webchat/guest/conversations"),data:JSON.stringify(s),success:function(e){e?l.startWebSocketConnection(e).done(function(){l.updateSessionCookies(),n.onChatStarted({data:n.oSessionData},e),l.getMe(),t.resolve(),l.postMessageWithTimestamp(n.conversationStarted),n.onClientConnected({message:n.conversationStarted,agents:n.oAgents}),n.bOpeningSocket=!1}):(t.reject("no response data in the api post request"),n.onError(e))},error:function(e){e.errorReason="StartFailed",n.bOpeningSocket=!1,t.reject(e||{}),l.handleError(e)}}))),t.promise()}},{key:"sendMessage",value:function(e){var t=m.default.Deferred(),n=this,o=n.oSessionData;if(n.bSessionActive){"text"==e.type&&(e.type="Text");var s=l.CreateUrl("/api/v2/webchat/guest/conversations/"+o.conversationId+"/members/"+o.memberId+"/messages");1==n.bSocketConnectionLost||1==n.bOpeningSocket?(l.handleError({errorReason:"MessageFailed"}),t.reject()):l.sendRequest({body:e.message},s).done(function(e){o.lastMessageId=e.id,l.updateSessionCookies(),t.resolve()}).fail(function(e){e.errorReason="MessageFailed",l.handleError(e),t.reject()})}else t.reject("There is no active chat session.");return t.promise()}},{key:"sendFile",value:function(){return m.default.Deferred().reject("This transport doesn't support file uploads.").promise()}},{key:"sendTyping",value:function(e){var t=m.default.Deferred(),n=this,o=n.oSessionData;if(n.bSessionActive)if(e&&"TypingStopped"!==e.type){var s=l.CreateUrl("/api/v2/webchat/guest/conversations/"+o.conversationId+"/members/"+o.memberId+"/typing");l.sendRequest("",s).done(function(e){e?t.resolve():t.reject("send typing indicator request returned no data")}).fail(function(e){t.reject(e||{})})}else t.resolve();else t.reject("trying to send typing indicator when session is not active");return t.promise()}},{key:"fetchHistory",value:function(){var e=m.default.Deferred();return this.capabilities.pagination?l.getNextHundredMessages({type:"fetchHistory"}).done(function(){e.resolve()}).fail(function(t){e.reject(t)}):e.reject("Fetching chat history on scroll is not enabled."),e.promise()}},{key:"fetchSessionData",value:function(){return this.oSessionData}},{key:"getAgents",value:function(){return this.oAgents}},{key:"restore",value:function(){var e=this,t=e.oSessionData,n=m.default.Deferred();return e.onCapabilitiesChanged(this.capabilities),e.bRestoring?n.reject("Already restoring. Ignoring request."):e.bSessionActive?n.reject("Chat session is already active, ignoring restore command."):(l.getSessionFromCookie(),t.conversationId?(e.bRestoring=!0,l.getConversationState().done(function(o){e.bFetchingMembers=!1,"CONNECTED"==o.state?(e.mySocket=new WebSocket(t.WebSocketUrl),l.subscribeSocketEvents(n),e.mySocket.addEventListener("open",function(t){e.bSessionActive=!0,e.bSocketConnectionLost=!1,e.mySocket.onmessage=function(e){var t=JSON.parse(e.data);l.processSocketFrame(t)},e.onRestore(),e.capabilities.pagination?l.getNextHundredMessages({type:"restore"}).done(function(){e.bRestoring=!1,n.resolve()}):l.getAllMessages().done(function(t){l.getPresences().done(function(n){e.oPresences=n.entities,l.parseTranscript(t,{type:"restore"})}),e.bRestoring=!1,n.resolve()}).fail(function(t){e.onRestoreFailed(t)})})):(e.onRestoreFailed(o),n.reject("customer disconnected, conversation ended"))}).fail(function(t){e.onRestoreFailed(t),n.reject("failed to retrieve conversation state")})):n.reject("No chat session found to restore.")),n.promise()}},{key:"fetchSessionAndRestoringInfo",value:function(){var e=!1;return l.getSessionFromCookie(),this.oSessionData&&this.oSessionData.conversationId&&(e=!0),{bRestoring:this.bRestoring,bSessionValid:e}}},{key:"asyncRestore",value:function(){return this.restore()}},{key:"endChat",value:function(){var e=m.default.Deferred(),t=this.oSessionData,n=t.conversationId,o=t.memberId,s=this;return this.bSessionActive?(u.default.request({timeout:12e3,crossDomain:!0,contentType:"application/json; charset=utf-8",cache:!1,headers:{Authorization:"Bearer "+s.oSessionData.jwt},type:"DELETE",url:l.CreateUrl("/api/v2/webchat/guest/conversations/"+n+"/members/"+o),success:function(e){setTimeout(function(){s.bSessionActive||l.terminateChatSession()},500)}}).always(function(t,n,o){var r=o||t;if(r){var a=r.status,i=r.responseText;!a||204!=a&&200!=a?(s.onError({code:a||"",message:i&&i.message?i.message:""}),e.reject(r)):(s.bSessionActive&&s.onChatEnded(r),e.resolve(r))}else s.onError(),e.reject(r);l.terminateChatSession()}),e.promise()):(e.reject("There is no active chat session"),s.onChatEnded(),l.terminateChatSession(),e.promise())}},{key:"updateUserData",value:function(){return m.default.Deferred().reject("This transport doesn't support updating userData during an active chat session.").promise()}},{key:"updateInteractionData",value:function(){return m.default.Deferred().reject("This transport doesn't support updating interactionData during an active chat session.").promise()}}]),e}();CXBus.registerModule("pure-cloud-v2-sockets-transport",p)}},["./webapp/plugins/cx-webchat-service/transports/pure-cloud-v2-sockets-transport.js"]);