UNPKG

vrv-mini-sdk

Version:
1 lines 10.3 kB
var miniSDK=function(){"use strict";let e={name:"Bridge",debug:!1,jsBridge:!1,electronBridge:!1,connect(){navigator.userAgent.toLowerCase().indexOf("electron")>-1?e.electronConnect():e.jsBridgeConnect()},jsBridgeConnect(t,o){(e=>{if(window.WebViewJavascriptBridge)return e(WebViewJavascriptBridge);if(window.WVJBCallbacks)return window.WVJBCallbacks.push(e);window.WVJBCallbacks=[e];let t=document.createElement("iframe");t.style.display="none",t.src="wvjbscheme://__BRIDGE_LOADED__",document.documentElement.appendChild(t),setTimeout((function(){document.documentElement.removeChild(t)}),0)})((t=>{e.jsBridge=t,t?console.info("[Bridge] JSBridge Connected"):o("JS桥连接失败")}))},electronConnect(){e.electronBridge=window.callByDDIOApp,e.electronBridge?console.info("[Bridge] Electron connected",e.electronBridge):console.error("[Bridge] Electron connect failed")},threadId:0,callMethod:(t,o={})=>new Promise(((r,n)=>{e.threadId++,console.time("thread-"+e.threadId),e.debug&&console.log("[Bridge][thread-"+e.threadId+"][start]",(new Date).toLocaleTimeString(),t,o),e.jsBridge?e.jsBridgeCallHandler(r,n,t,o,e.threadId):e.electronBridge?e.electronCallHandler(r,n,t,o,e.threadId):console.error("[Bridge] No Bridge,Or Please open it on the client")})),jsBridgeCallHandler(t,o,r,n={},s){if(e.jsBridge){let o=e.jsBridge.callHandler;["registerMessageNotice","registerNFCNotice","registerProgressNotice","multiScan","setRightNavBarItem"].includes(r)&&(o=e.jsBridge.registerHandler),o(r,n,(o=>{e.debug&&console.log("[Bridge][thread-"+s+"][end]",(new Date).toLocaleTimeString(),r,o),console.timeEnd("thread-"+s),t(o)}))}else console.error("[Bridge] No Bridge,Or Please open it on the client",e.jsBridge),o("No Bridge,Or Please open it on the client")},electronCallHandler(t,o,r,n={},s){e.electronBridge?e.electronBridge[r]?(n.success=o=>{e.debug&&console.log("[Bridge][thread-"+s+"][end]",(new Date).toLocaleTimeString(),r,o),console.timeEnd("thread-"+s),t(o)},e.electronBridge[r](n)):(console.error("[Bridge] electron illegal methods:",r),o("electron illegal methods:"+r)):(console.error("[Bridge] No Bridge,Or Please open it on the client"),o("No Bridge,Or Please open it on the client"))}};var t={isArray:e=>Array.isArray(e),isObject:e=>"[object Object]"===Object.prototype.toString.call(e),isPromise:e=>"[object Promise]"===Object.prototype.toString.call(e)};const o={deepCopy(...e){let r,n,s,i,d,a,c=e[0]||{},l=1,p=e.length;for(1===p&&(c=this,l=0);l<p;l++)if(r=e[l],r)for(n in r)i=r[n],"_proto_"!==n&&c[n]!==i&&(i&&(t.isObject(i)||(d=t.isArray(i)))?(s=c[n],a=d&&!t.isArray(s)?[]:d||t.isObject(s)?s:{},d=!1,c[n]=o.deepCopy(a,i)):void 0!==i&&(c[n]=i));return c}};window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("config")}catch(t){window.Event=function(e,t,o,r){let n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t,o,r),n}}let r={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},n="readystatechange loadstart progress abort error load timeout loadend".split(" "),s="timeout withCredentials".split(" "),i="readyState responseURL status statusText responseType response responseText responseXML".split(" "),d={100:"Continue",101:"Switching Protocols",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",300:"Multiple Choice",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported"};function a(){this.config={events:{},headers:{}},this.proxy=!1,this.debug=!1}o.deepCopy(a,r),o.deepCopy(a.prototype,r),a.prototype.mock=!0,a.prototype.noProxy=!1,o.deepCopy(a.prototype,{open:function(e,t,r,d,c){let l=this;function p(e){for(let t=0;t<i.length;t++)try{l[i[t]]=xhr[i[t]]}catch(e){}l.dispatchEvent(new Event(e.type))}if(o.deepCopy(this.config,{method:e,url:t,async:"boolean"!=typeof r||r,username:d,password:c,body:"",options:{url:t,method:e}}),this.noProxy||this.proxy){let o=function(){let e=function(){let e=location.href,t=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/.exec(e.toLowerCase())||[];return/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(t[1])}();return window.ActiveXObject?!e&&t()||function(){try{return new window._ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}():t();function t(){try{return new window._XMLHttpRequest}catch(e){}}}();this.config.xhr=o;for(let e=0;e<n.length;e++)o.addEventListener(n[e],p);d?o.open(e,t,r,d,c):o.open(e,t,r);for(let t=0;t<s.length;t++)try{o[s[t]]=l[s[t]]}catch(e){}}else this.readyState=a.OPENED,this.dispatchEvent(new Event("readystatechange"))},setRequestHeader:function(e,t){if(this.noProxy||this.proxy)return void this.config.xhr.setRequestHeader(e,t);let o=this.config.headers;o[e]?o[e]+=","+t:o[e]=t},timeout:0,withCredentials:!1,upload:{},send:function(e){let o=this;if(this.config.body=e,this.config.timeout=this.timeout,this.noProxy||this.proxy)this.config.xhr.send(e);else if(this.setRequestHeader("X-Requested-With","MockXHR"),this.dispatchEvent(new Event("loadstart")),o.readyState=a.HEADERS_RECEIVED,o.dispatchEvent(new Event("readystatechange")),o.readyState=a.LOADING,o.dispatchEvent(new Event("readystatechange")),a.proxy){a.debug&&console.log("[XHR] 请求xhr:",o.config);let e=a.proxy(o);t.isPromise(e)&&e.then((e=>{r(e)})).catch((e=>{r(e)}))}else console.warn("[tools-xhr] proxy param is not a Promise");function r(e,t){a.debug&&console.log("[XHR] 响应data:",e),e.responseHeaders&&(o.responseHeaders=e.responseHeaders),e.response&&(o.response=e.response||""),"string"==typeof e.response&&(o.responseText=e.response),e.responseType&&(o.responseType=e.responseType),e.responseURL&&(o.responseURL=e.responseURL),e.responseXML&&(o.responseXML=e.responseXML),o.status=e.status||200,o.statusText=e.statusText||d[o.status],e.timeout&&(o.timeout=e.timeout),e.withCredentials&&(o.withCredentials=e.withCredentials),o.readyState=a.DONE,o.dispatchEvent(new Event("readystatechange")),o.dispatchEvent(new Event("load")),o.dispatchEvent(new Event("loadend"))}},abort:function(){this.noProxy?this.config.xhr.abort():(this.readyState=a.UNSENT,this.dispatchEvent(new Event("abort",!1,!1,this)),this.dispatchEvent(new Event("error",!1,!1,this)))}}),o.deepCopy(a.prototype,{status:a.UNSENT,statusText:"",getResponseHeader:function(e){return this.noProxy||this.proxy?this.config.xhr.getResponseHeader(e):this.responseHeaders[e.toLowerCase()]},getAllResponseHeaders:function(){if(this.noProxy||this.proxy)return this.config.xhr.getAllResponseHeaders();let e=this.responseHeaders,t="";for(let o in e)e.hasOwnProperty(o)&&(t+=o+": "+e[o]+"\r\n");return t},overrideMimeType:function(){},responseHeaders:{},responseURL:"",responseType:"",response:null,responseText:"",responseXML:null}),o.deepCopy(a.prototype,{addEventListener:function(e,t){let o=this.config.events;o[e]||(o[e]=[]),o[e].push(t)},removeEventListener:function(e,t){let o=this.config.events[e]||[];for(let e=0;e<o.length;e++)o[e]===t&&o.splice(e--,1)},dispatchEvent:function(e){let t=this.config.events[e.type]||[];for(let o=0;o<t.length;o++)t[o].call(this,e);let o="on"+e.type;this[o]&&this[o](e)}});let c={debug:!1,requestHook:!1,responseHook:!1,createHooks(e){if(XMLHttpRequest.prototype.hooked)console.warn("[XHR Hook]","createHooks only need to create it once");else{let e=XMLHttpRequest.prototype.open,t=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(){let o=arguments,r={};return this.send=function(e){let n=c.requestHook;if(n){if(r={url:o[1],method:o[0],body:arguments[0],headers:this.getAllResponseHeaders()},"function"==typeof n){let{url:e,method:t,body:s,headers:i}=n(r);o[0]=t,o[1]=e,arguments[0]=s;for(let e in i)i.hasOwnProperty(e)&&this.setRequestHeader(e,i[e])}c.debug&&console.log("[Net Hook] requestHook",r)}return t.apply(this,arguments)},this.addEventListener("readystatechange",(()=>{if(4===this.readyState){let e=this.responseText,t=this.response;Object.defineProperty(this,"responseText",{writable:!0}),Object.defineProperty(this,"response",{writable:!0}),this.responseText=e,this.response=t;let o=c.responseHook;o&&("function"==typeof o&&o(r,this),c.debug&&console.log("[Net Hook] responseHook",r,this))}}),!1),e.apply(this,[].slice.call(arguments))},XMLHttpRequest.prototype.hooked=!0}}},l={xhr:{mock:a,hook:c},object:o,compare:t};var p={nativeProxyFunction:"requestProxy"};let{object:h,xhr:u}=l,g={debug:!1,load:t=>{if(t){if("object"!=typeof t)throw"params is not a object";g.debug=!!t.debug,(t.debug||t.network.bridge)&&(e.debug=t.debug||t.network.bridge.debug),g.config=h.deepCopy(g.config,t)}g.loaded=((t,o)=>{if(o||e.connect(),t.network.xhr.proxy||t.network.proxy){let o=o=>new Promise(((r,n)=>{e.callMethod(t.network.nativeProxyFunction||p.nativeProxyFunction,o.config).then((e=>r(e))).catch((e=>n(e)))})),r=!1,n=!1;"function"==typeof t.network.xhr.proxy&&(n=t.network.xhr.proxy),"function"==typeof t.network.proxy&&(r=t.network.proxy),l.xhr.mock.proxy=n||r||o,window.XMLHttpRequest=l.xhr.mock,console.info("[Proxy]","MiniXMLHttpRequest Replaced")}else window.XMLHttpRequest.prototype.mock&&(window.XMLHttpRequest=_XMLHttpRequest,console.info("[SDK]","XMLHttpRequest Recover"));return l.xhr.hook.debug=t.network.xhr.debug||t.debug,l.xhr.hook.requestHook=t.network.xhr.requestHook||t.network.requestHook,l.xhr.hook.responseHook=t.network.xhr.responseHook||t.network.responseHook,l.xhr.hook.createHooks(),!0})(g.config,g.loaded)},loaded:!1,config:{debug:!1,network:{proxy:!1,nativeProxyFunction:!1,requestHook:!1,responseHook:!1,xhr:{proxy:!1,requestHook:!1,responseHook:!1},fetch:{proxy:!1,requestHook:!1,responseHook:!1},bridge:{debug:!1}}},Bridge:e,XHR:u,Flags:p};return g}();