UNPKG

@bddh/starling-realtime-client

Version:

2 lines (1 loc) 6.77 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./_virtual/_rollupPluginBabelHelpers.js"),t=require("uuid"),n=require("@bddh/starling-web-socket/es/create-web-socket"),r=require("lodash/pick"),o=require("lodash/omit"),s=require("lodash/get"),c=require("./interface.js"),a=function(a){function i(a,u){var d,l=this;e.classCallCheck(this,i),e.defineProperty(this,"dhServerSocket",null),e.defineProperty(this,"preConnectSuccess",!1),e.defineProperty(this,"connectParams",null),e.defineProperty(this,"socketClosingPromise",null),e.defineProperty(this,"url",void 0),e.defineProperty(this,"firstConnect",!0),e.defineProperty(this,"connectingTimer",null),e.defineProperty(this,"connectingMs",3e4),e.defineProperty(this,"lastPreOpen",!1),e.defineProperty(this,"reconnectingTimeout",!1),e.defineProperty(this,"lastReportedReadyState",-1),e.defineProperty(this,"lastHbAckTs",0),e.defineProperty(this,"checkHeartbeatMismatch",void 0),e.defineProperty(this,"emitRawStatusMessage",void 0),e.defineProperty(this,"sendPreConnect",(function(e,n){var r,o=e.token,s=e.sessionId,c=e.onConnect;null===(r=l.dhServerSocket)||void 0===r||r.request({action:"RE_CONNECT",requestId:t.v4(),body:JSON.stringify({token:o,sessionId:s})}).on((function(e,t){null==c||c(e),0!==e.code&&(t(),l.handleConnect()),null==n||n(l.dhServerSocket)})),l.firstConnect=!1})),e.defineProperty(this,"createSocket",(function(t,r){return(d=d||e.asyncToGenerator(e.regeneratorRuntime().mark((function t(r,o){var a,i;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(l.connectParams=r,l.lastPreOpen=!!o,a=r.sessionId,i=r.onDigitalHumanCallback,!l.socketClosingPromise){e.next=6;break}return e.next=6,l.socketClosingPromise;case 6:if(!l.dhServerSocket){e.next=9;break}return e.next=9,l.closeSocket();case 9:return e.abrupt("return",new Promise((function(e,t){var u=!1,d=function(t){u||(u=!0,e(t))},h={keepAlive:"heartbeat",checkHeartbeatMismatch:l.checkHeartbeatMismatch,reopen:s(l.connectParams,"reConnect",!0),getKeepAliveMessage:function(e){return{requestId:e,action:"HEART_BEAT",body:"".concat(l.lastHbAckTs),clientTs:Date.now()}},combine:function(e,t){return e&&t&&e.requestId===t.requestId},onOpen:function(){l.dhServerSocket=p,d(l.dhServerSocket),a&&l.firstConnect?l.sendPreConnect(r,d):o&&l.firstConnect||l.handleConnect()},onClose:function(){l.dhServerSocket=null,l.socketClosingPromise=null,d(null)},onError:function(e){t(e)}},p=n.createWebSocket(l.url,h);p.onReadyStateChange((function(e){l.lastReportedReadyState=e,0===e?(l.startConnectingWatch(),i&&i({status:c.statusEnum.DH_LIB_INIT})):(l.clearConnectingWatch(),l.reconnectingTimeout=!1),1===e&&o&&(l.preConnectSuccess=!0),3===e&&(l.preConnectSuccess=!1),i&&i({status:c.statusEnum.DH_LIB_FULL_STATUS,content:{type:"wsState",readyState:e,body:c.WS_STATUS_MAP[e]}})})),p.onMessage((function(e){var t=e.action;"HEART_BEAT"===t&&(l.lastHbAckTs=Date.now()),[c.errorTypeEnum.TIMEOUT_EXIT,c.errorTypeEnum.DISCONNECT_ALERT].includes(t)&&(i&&i({status:c.statusEnum.DH_LIB_STATUS,content:{type:t}}),l.emitRawStatusMessage&&i&&i({status:c.statusEnum.DH_LIB_MESSAGE,content:e})),[c.errorTypeEnum.TIMEOUT_EXIT,c.errorTypeEnum.DISCONNECT_ALERT,"HEART_BEAT","CONNECT"].includes(t)||i&&i({status:c.statusEnum.DH_LIB_MESSAGE,content:e})})),l.dhServerSocket=p,p.open()})));case 10:case"end":return e.stop()}}),t)})))).apply(this,arguments)})),e.defineProperty(this,"sendConnect",(function(e){l.connectParams=e,l.dhServerSocket&&l.handleConnect()})),e.defineProperty(this,"closeSocket",e.asyncToGenerator(e.regeneratorRuntime().mark((function t(){return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(l.resetState(),l.dhServerSocket){e.next=3;break}return e.abrupt("return");case 3:return l.socketClosingPromise=l.dhServerSocket.close(),e.next=6,l.socketClosingPromise;case 6:l.dhServerSocket=null;case 7:case"end":return e.stop()}}),t)})))),e.defineProperty(this,"handleConnect",e.asyncToGenerator(e.regeneratorRuntime().mark((function n(){var s,a,i,u,d,h;return e.regeneratorRuntime().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(l.connectParams){n.next=2;break}return n.abrupt("return");case 2:if(s=l.connectParams,a=s.appId,i=s.appKey,u=s.token,d=s.parameters,h=s.onConnect,a||i||u){n.next=5;break}return n.abrupt("return");case 5:l.dhServerSocket&&l.dhServerSocket.request({action:"CONNECT",clientTs:(new Date).getTime(),requestId:t.v4(),body:JSON.stringify(e.objectSpread2(e.objectSpread2({token:u,appId:a,appKey:i},r(l.connectParams,c.CONNECT_MAIN_KEY)),{},{parameters:e.objectSpread2(e.objectSpread2({},o(d,["parameters"])),d&&d.parameters?d.parameters:{})}))}).on((function(e,t){null==h||h(e),0!==e.code&&t()}));case 6:case"end":return n.stop()}}),n)}))));var h=u||{},p=h.checkHeartbeatMismatch,S=h.emitRawStatusMessage,m=void 0!==S&&S;this.url=a,this.checkHeartbeatMismatch=null!=p&&p,this.emitRawStatusMessage=m}return e.createClass(i,[{key:"setEmitRawStatusMessage",value:function(e){this.emitRawStatusMessage=e}},{key:"sendMessage",value:function(n,r){return(a=a||e.asyncToGenerator(e.regeneratorRuntime().mark((function n(r,o){var s;return e.regeneratorRuntime().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:try{this.dhServerSocket&&this.dhServerSocket&&this.dhServerSocket.request(r).on((function(e){o&&o(e)}))}catch(n){s="object"===e.typeof(r)&&"requestId"in r?r.requestId:t.v4(),o&&o({code:-11,body:null,action:"RENDER_ERROR",requestId:s,message:JSON.stringify(n)})}case 1:case"end":return n.stop()}}),n,this)})))).apply(this,arguments)}},{key:"startConnectingWatch",value:function(){var t=this;this.connectingTimer||this.reconnectingTimeout||(this.connectingTimer=setTimeout(e.asyncToGenerator(e.regeneratorRuntime().mark((function n(){return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.connectingTimer=null,t.dhServerSocket&&0===t.lastReportedReadyState){e.next=3;break}return e.abrupt("return");case 3:if(console.warn("reconnect from CONNECTING timeout"),t.reconnectingTimeout=!0,e.prev=5,!t.connectParams){e.next=9;break}return e.next=9,t.createSocket(t.connectParams,t.lastPreOpen);case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(5),console.error("reconnect from CONNECTING timeout failed",e.t0);case 14:return e.prev=14,t.reconnectingTimeout=!1,e.finish(14);case 17:case"end":return e.stop()}}),n,null,[[5,11,14,17]])}))),this.connectingMs))}},{key:"clearConnectingWatch",value:function(){this.connectingTimer&&(clearTimeout(this.connectingTimer),this.connectingTimer=null)}},{key:"resetState",value:function(){this.clearConnectingWatch(),this.reconnectingTimeout=!1,this.lastReportedReadyState=-1,this.lastHbAckTs=0}}]),i}();exports.CONNECTING_STUCK_MS_DEFAULT=3e4,exports.default=a;