@tencentcloud/lite-chat
Version:
Tencent Cloud Chat SDK for Web/Mini Program/uni-app/React Native/Donut
2 lines (1 loc) • 7.59 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self)["TencentCloudChatPush-token-register"]=t()}(this,function(){"use strict";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{a(o.next(e))}catch(e){i(e)}}function u(e){try{a(o.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(r,u)}a((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,u=n.get("webPush")||{},a=n.get("instance")||{};return{servcmd:t,ver:"v4",platform:s,websdkappid:537048168,websdkversion:"1.7.3",a2:u.a2Key||void 0,tinyid:u.tinyID||void 0,status_instid:u.statusInstanceId||0,sdkappid:a.sdkAppId,contenttype:"json",reqtime:Math.floor(Date.now()/1e3),identifier:u.a2Key?void 0:u.userId,usersig:u.a2Key?void 0:u.userSig,sdkability:75689843,sdkability_ext:i(""),cappid:a.applicationID||0,tjgID:"",seq:o(),cs:0,idtype:r}}(s),u=n(i);return r.cs=o(s,u),{head:r,body:u}}"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 u(){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)||""]}}),u=`${i.head.seq}${s}`;return o.sendPacket(i,{timeout:9e4,requestId:u})})}var a=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:u}}=e;n.subscribeInnerEvent(s,this._handleForceOfflineFromServerPush,this),n.subscribeInnerEvent(o,u.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:a}=e;t.set("webPush",{userId:r,userSig:a});const c=yield u();if(c){i.info("loginWebPush",s(c));const{HelloInterval:e,TimeStamp:t,WebPushPubKey:n,InstId:o,A2Key:r,TinyId:u}=c;return this._latestLoginAt=0,this._handleLoginWebPushSuccess({helloInterval:e,serverTimeSeconds:t,instanceID:o,a2Key:r,tinyID:u,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:u,webPushAuthKey:a,webPushP256:c,pushSDKVersion:d,browserVersion:h,browserPlatform:l,browserLanguage:f}=o,g="offline_push_status.webpush_set_token",v=n({servcmd:g,data:{InstType:r,Auth:a,Endpoint:u,P256:c,SdkVer:(null===(t=s.get("instance"))||void 0===t?void 0:t.version)||"",PushVer:d,DevMod:h,DevOS:l,Lang:f}}),_=`${v.head.seq}${g}`;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:u=!0}=o||{};try{return u&&(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:u,vapid:a}=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:u,isLoggedIn:!0,vapid:a})}_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 u();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)}};return new class{constructor(){this.name="PushTokenRegisterPlugin"}install(t){e.init(t),a.init(t)}}});