UNPKG

@tencentcloud/lite-chat

Version:

Tencent Cloud Chat SDK for Web/Mini Program/uni-app/React Native/Donut

2 lines (1 loc) 7.35 kB
const e=new class{init(e){this.core=e}};function t(e,t,n,o){return new(n||(n=Promise))(function(s,i){function r(e){try{u(o.next(e))}catch(e){i(e)}}function a(e){try{u(o.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(r,a)}u((o=o.apply(e,t||[])).next())})}function n(t){const{common:{filterProtocolDataInvalidFields:n,calcBodyCRC:o}}=e.core,{servcmd:s,data:i}=t,r=function(t){const{store:n,common:{generateSequence:o},utils:{platform:s,base16EncodeBinaryString:i},constants:{WEB_PUSH_ACCOUNT_TYPE:r}}=e.core,a=n.get("webPush")||{},u=n.get("instance")||{};return{servcmd:t,ver:"v4",platform:s,websdkappid:537048168,websdkversion:"1.7.3",a2:a.a2Key||void 0,tinyid:a.tinyID||void 0,status_instid:a.statusInstanceId||0,sdkappid:u.sdkAppId,contenttype:"json",reqtime:Math.floor(Date.now()/1e3),identifier:a.a2Key?void 0:a.userId,usersig:a.a2Key?void 0:a.userSig,sdkability:75689843,sdkability_ext:i(""),cappid:u.applicationID||0,tjgID:"",seq:o(),cs:0,idtype:r}}(s),a=n(i);return r.cs=o(s,a),{head:r,body:a}}"function"==typeof SuppressedError&&SuppressedError;const o=0,s=1,i=2;function r(){return function(){if("undefined"==typeof window)return!1;if(window.matchMedia){const e=window.matchMedia("(display-mode: standalone)").matches,t=window.matchMedia("(display-mode: fullscreen)").matches;if(e)return!0;if(t){const e=!!document.querySelector('link[rel="manifest"]'),t="serviceWorker"in navigator&&null!==navigator.serviceWorker.controller;return e||t}}if("undefined"!=typeof navigator&&!0===navigator.standalone)return!0;return!("undefined"==typeof document||!document.referrer||!document.referrer.includes("android-app://"))}()?i:function(){const{utils:{IS_IOS:t,IS_ANDROID:n,USER_AGENT:o}}=e.core;if(t||n)return!0;if("undefined"!=typeof navigator){const e=navigator;if(e.userAgentData&&e.userAgentData.mobile)return!0}const s=o.toLowerCase();return/android|webos|iphone|ipad|ipod|blackberry|windows phone|mobile|opera mini|iemobile/i.test(s)}()?s:o}function a(){return t(this,void 0,void 0,function*(){var t;const{channel:o}=e.core,s="im_open_status.wslogin",i=n({servcmd:s,data:{State:"Online",is_web_uniapp:0,InstType:0,WebClientType:r(),IsWebPushLogin:1,DomainList:[(null===(t=null===window||void 0===window?void 0:window.location)||void 0===t?void 0:t.origin)||""]}}),a=`${i.head.seq}${s}`;return o.sendPacket(i,{timeout:9e4,requestId:a})})}var u=new class{constructor(){this._latestLoginAt=0,this._latestSendOnlinePresenceRequestTime=0}init(e){this._core=e;const{helper:{registerExperimentalAPI:t},notificationCenter:n,InnerEvent:{ERROR:o,FORCE_OFFLINE:s,DESTROY:i,RECONNECTED:r},constants:{ERROR_CODE:a}}=e;n.subscribeInnerEvent(s,this._handleForceOfflineFromServerPush,this),n.subscribeInnerEvent(o,a.ACCOUNT_A2KEY_EXPIRED,this._handleForceOfflineFromResponse,this,this._isWebPushEvent),n.subscribeInnerEvent(r,this._reLoginWebPush,this),n.subscribeInnerEvent(i,this._dispose,this),t("loginWebPush",this),t("logoutWebPush",this),t("setWebPushToken",this)}loginWebPush(e){return t(this,void 0,void 0,function*(){const{store:t,common:{ChatError:n},constants:{ERROR_CODE:o},utils:{safeStringify:s},ssoLog:i}=this._core;i.debug("loginWebPush.start",s(e));try{if(this._isLoginIn())return this._createRepeatLoginResponse();if(this._isLoginFrequencyExceeded())throw new n({functionName:"loginWebPush",code:o.REPEAT_LOGIN});const{userID:r,userSig:u}=e;t.set("webPush",{userId:r,userSig:u});const c=yield a();if(c){i.info("loginWebPush",s(c));const{HelloInterval:e,TimeStamp:t,WebPushPubKey:n,InstId:o,A2Key:r,TinyId:a}=c;return this._latestLoginAt=0,this._handleLoginWebPushSuccess({helloInterval:e,serverTimeSeconds:t,instanceID:o,a2Key:r,tinyID:a,vapid:n}),{code:0,data:{vapid:n}}}}catch(e){const{errorCode:t,errorInfo:r}=e;t!==o.REPEAT_LOGIN&&(this._latestLoginAt=0),i.error("loginWebPush",s(e));throw new n({functionName:"loginWebPush",code:t,message:r})}})}setWebPushToken(o){return t(this,void 0,void 0,function*(){const{utils:{safeStringify:s},ssoLog:i,common:{ChatError:r}}=this._core;i.debug("setWebPushToken.start",s(o));try{const r=yield function(o){return t(this,void 0,void 0,function*(){var t;const{store:s,channel:i}=e.core,{browserType:r,pushToken:a,webPushAuthKey:u,webPushP256:c,pushSDKVersion:d,browserVersion:h,browserPlatform:l,browserLanguage:g}=o,f="offline_push_status.webpush_set_token",v=n({servcmd:f,data:{InstType:r,Auth:u,Endpoint:a,P256:c,SdkVer:(null===(t=s.get("instance"))||void 0===t?void 0:t.version)||"",PushVer:d,DevMod:h,DevOS:l,Lang:g}}),_=`${v.head.seq}${f}`;return i.sendPacket(v,{requestId:_})})}(o);return i.info("setWebPushToken",s(r)),r}catch(e){const{errorCode:t,errorInfo:n}=e;i.error("setWebPushToken",s(e));throw new r({functionName:"loginWebPush",code:t,message:n})}})}logoutWebPush(o){return t(this,void 0,void 0,function*(){const{utils:{safeStringify:s},ssoLog:i,common:{ChatError:r}}=this._core;i.debug("logoutWebPush.start",s(o));const{needLogoutFromServer:a=!0}=o||{};try{return a&&(yield function(){return t(this,void 0,void 0,function*(){const t="im_open_status.wslogout",o=n({servcmd:t,data:{wslogout_type:0,isWebUniapp:0}}),s=`${o.head.seq}${t}`;return e.core.channel.sendPacket(o,{requestId:s})})}()),i.info("logoutWebPush"),{code:0,data:{}}}catch(e){const{errorCode:t,errorInfo:n}=e;throw i.error("logoutWebPush",s(e)),new r({functionName:"logoutWebPush",code:t,message:n})}finally{this._reset()}})}_isLoginIn(){var e;return!0===(null===(e=this._core.store.get("webPush"))||void 0===e?void 0:e.isLoggedIn)}_isLoginFrequencyExceeded(){return Date.now()-this._latestLoginAt<=15e3}_handleLoginWebPushSuccess(e){var t;const{store:n}=this._core,{timeManager:o}=this._core.common,{serverTimeSeconds:s,a2Key:i,tinyID:r,instanceID:a,vapid:u}=e;if(!0!==(null===(t=n.get("login"))||void 0===t?void 0:t.isLoggedIn)){const e=1e3*s;o.calculateTimeOffsetWithServer(this._latestLoginAt,e)}n.set("webPush",{a2Key:i,tinyID:r,statusInstanceId:a,isLoggedIn:!0,vapid:u})}_handleForceOfflineFromResponse(e){this._isLoginIn()&&this.logoutWebPush({needLogoutFromServer:!1})}_isWebPushEvent(e){const{head:t}=e||{},{constants:{WEB_PUSH_ACCOUNT_TYPE:n}}=this._core;return(null==t?void 0:t.idtype)===n}_createRepeatLoginResponse(){var e;const{store:t,common:{getErrorMessage:n}}=this._core;return{code:0,data:{actionStatus:"OK",errorCode:0,errorInfo:n({code:"RepeatLogin",replacement1:null===(e=t.get("webPush"))||void 0===e?void 0:e.userId}),repeatLogin:!0}}}_handleForceOfflineFromServerPush(e){this.logoutWebPush({needLogoutFromServer:!1})}_reLoginWebPush(){return t(this,void 0,void 0,function*(){const{store:e,ssoLog:t,utils:{safeStringify:n}}=this._core;try{if(!this._isLoginIn())return;const t=yield a();if(t){const{InstId:n}=t;e.set("webPush",{statusInstanceId:n})}}catch(e){t.warn("_reLoginWebPush",n(e))}})}_reset(){this._latestLoginAt=0,this._latestSendOnlinePresenceRequestTime=0,this._core.store.clear("webPush")}_dispose(){const{notificationCenter:e,InnerEvent:{ERROR:t},constants:{ERROR_CODE:n}}=this._core;this._reset(),e.unSubscribeInnerEvent(t,n.ACCOUNT_A2KEY_EXPIRED,this._handleForceOfflineFromResponse,this),e.unSubscribeInnerEvent(t,n.MSG_A2KEY_EXPIRED,this._handleForceOfflineFromResponse,this)}};var c=new class{constructor(){this.name="PushTokenRegisterPlugin"}install(t){e.init(t),u.init(t)}};export{c as default};