UNPKG

@sddxzxqy/core-js-sdk

Version:

Official SDK of OCP Auth

2 lines (1 loc) 10.3 kB
import{__awaiter as t,__generator as e,__assign as n}from"tslib";import{InterceptorManager as r}from"./InterceptorManager.js";import{decryptData as s,createAsymmetricKey as o,SecureType as i,encryptData as a}from"./secure/SecureUtils.js";import p from"qs";var c,u,h=function(){function h(s){var o=this;if(this.headers={"X-Standard-Session":"","X-Standard-AppId":"","X-Encrypt-flag":"","X-Standard-tenantId":"","X-Standard-from":""},this.DEFAULT_CONFIG={asySecureType:i.SM2,sySecureType:i.SM4},this.options=Object.assign(this.DEFAULT_CONFIG,s),this.baseUrl=s.host,!s.httpClientOptions)throw new Error("缺少 httpClientOptions 参数");if(!s.httpClientOptions.httpClient)throw new Error("[httpClientOptions.httpClient]属性不能为空");if(!s.httpClientOptions.localStorage)throw new Error("[httpClientOptions.localStorage]属性不能为空");if(!s.appId)throw new Error("appId属性不能为空");s.httpClientOptions.requestFrom="@sddxzxqy/core-js-sdk@1.1.22",this._localStorage=s.httpClientOptions.localStorage,this.httpClient=s.httpClientOptions.httpClient,this.interceptors={request:new r,response:new r},this.interceptors.request.use({onFulfilled:function(r){return t(o,void 0,void 0,(function(){var t,o,i,a,p,h,l,d;return e(this,(function(e){switch(e.label){case 0:r.contentType||(r.contentType=u.JSON),e.label=1;case 1:return e.trys.push([1,5,,6]),t=r,o=[n({},this.headers)],d={"X-Standard-AppId":s.appId},i="Authorization",a="Bearer ",[4,s.httpClientOptions.localStorage.get(c.ACCESS_TOKEN)];case 2:return d[i]=a+e.sent(),d["X-Standard-from"]="".concat(s.httpClientOptions.requestFrom),p="X-Standard-Session",[4,s.httpClientOptions.localStorage.get(c.SESSION_ID)];case 3:return d[p]=e.sent(),h="X-Standard-tenantId",[4,s.httpClientOptions.localStorage.get(c.TENANT_ID)];case 4:return t.headers=n.apply(void 0,[n.apply(void 0,o.concat([(d[h]=e.sent(),d["Content-Type"]=r.contentType,d)])),r.headers]),Object.keys(r.headers).forEach((function(t){r.headers&&!r.headers[t]&&delete r.headers[t]})),[3,6];case 5:return l=e.sent(),[2,Promise.reject(l)];case 6:return[2,r]}}))}))},onRejected:function(t){return Promise.reject(t)},synchronous:!0}),this.interceptors.request.use({runWhen:function(t){return!!t.encrypt},onFulfilled:function(r){return t(o,void 0,void 0,(function(){var t,s,o,i;return e(this,(function(e){switch(e.label){case 0:if(!r.data)return[2,r];if("get"===r.method)throw new Error("get请求不支持加密操作");if(r.contentType===u.JSON)t="json";else{if(r.contentType!==u.FORM)throw new Error("加密操作支持的Content-Type类型为 application/json、application/x-www-form-urlencoded");t="form"}return o=a,i=[r.data,t,this.options.httpClientOptions.sySecureType,this.options.httpClientOptions.asySecureType],[4,this.options.httpClientOptions.localStorage.get(c.SEVER_PUBLIC_KEY)];case 1:return[4,o.apply(void 0,i.concat([e.sent()]))];case 2:return s=e.sent(),r.data=s.result,r.headers=n(n({},r.headers),{"X-Encrypt-flag":"".concat(s.symmetricKey)}),[2,r]}}))}))},onRejected:function(t){return Promise.reject(t)}}),this.interceptors.response.use({onFulfilled:function(n){return t(o,void 0,void 0,(function(){return e(this,(function(t){return[2,this.decryptResponseData(n)]}))}))},onRejected:function(n){return t(o,void 0,void 0,(function(){var t,r,s,o,i,a;return e(this,(function(e){switch(e.label){case 0:return n.standardResponse&&(n.standardResponse.code=parseInt(n.standardResponse.code+"",10)),"string"!=typeof n?[3,1]:(s={code:-1,success:!1,data:{},message:n},this.options.httpClientOptions.onError&&(s=null===(o=this.options.httpClientOptions.onError)||void 0===o?void 0:o.call(this,-1,s)),[2,Promise.resolve({httpStatus:-1,standardResponse:s})]);case 1:return n instanceof Error?(s={code:-1,success:!1,data:{},message:n.message},this.options.httpClientOptions.onError&&(s=null===(i=this.options.httpClientOptions.onError)||void 0===i?void 0:i.call(this,-1,s)),[2,Promise.resolve({httpStatus:-1,standardResponse:s})]):[3,2];case 2:return n.standardResponse?[4,this.decryptResponseData(n)]:[3,4];case 3:return t=e.sent(),r=t.httpStatus,s=t.standardResponse,this.options.httpClientOptions.onError&&(n.standardResponse=null===(a=this.options.httpClientOptions.onError)||void 0===a?void 0:a.call(this,r,s)),[2,Promise.resolve(n)];case 4:return[2,Promise.resolve(n)]}}))}))}}),this.interceptors.response.use({onFulfilled:function(n){return t(o,void 0,void 0,(function(){var t;return e(this,(function(e){switch(e.label){case 0:return t=this.getHeader(n,"x-standard-sc"),t?[4,s.httpClientOptions.localStorage.save(c.SESSION_ID,t)]:[3,2];case 1:e.sent(),e.label=2;case 2:return[2,Promise.resolve(n)]}}))}))}}),this.initSession().catch((function(t){console.error("会话创建失败: ",t)}))}return Object.defineProperty(h.prototype,"localStorage",{get:function(){return this._localStorage},enumerable:!1,configurable:!0}),Object.defineProperty(h.prototype,"appHost",{get:function(){if(this.baseUrl)return this.baseUrl.replace(/\/$/,"")},enumerable:!1,configurable:!0}),h.prototype.getHeader=function(t,e){if(t&&t.responseHeader&&e){var n=t.responseHeader;for(var r in n)if(r.toLowerCase()===e.toLowerCase())return t.responseHeader[r]}},h.prototype.addOnErrorCallback=function(t){"function"==typeof t&&(this.options.httpClientOptions.onError=t)},h.prototype.setBaseUrl=function(t){this.baseUrl=t},h.prototype.get=function(n,r,s){return void 0===s&&(s={}),t(this,void 0,void 0,(function(){return e(this,(function(t){return[2,this.request({path:n,method:"get",data:r,encrypt:!1,headers:null==s?void 0:s.headers}).then((function(t){var e=t.standardResponse;return Promise.resolve(e)})).catch((function(t){var e=t.standardResponse;return Promise.reject(e)}))]}))}))},h.prototype.postJson=function(n,r,s){return void 0===s&&(s={encrypt:!1}),t(this,void 0,void 0,(function(){return e(this,(function(t){return[2,this.request({path:n,method:"post",data:r,encrypt:null==s?void 0:s.encrypt,contentType:u.JSON,headers:null==s?void 0:s.headers}).then((function(t){var e=t.standardResponse;return Promise.resolve(e)})).catch((function(t){var e=t.standardResponse;return Promise.reject(e)}))]}))}))},h.prototype.postForm=function(n,r,s){return void 0===s&&(s={encrypt:!1}),t(this,void 0,void 0,(function(){return e(this,(function(t){return[2,this.request({path:n,method:"post",data:s.encrypt?r:p.stringify(r),encrypt:s.encrypt,contentType:u.FORM,headers:s.headers}).then((function(t){var e=t.standardResponse;return Promise.resolve(e)})).catch((function(t){var e=t.standardResponse;return Promise.reject(e)}))]}))}))},h.prototype.fetchPostForm=function(t,e){void 0===e&&(e={});var n=new RegExp(/(http|https):\/\/\S*/);return this.appHost&&!n.test(this.appHost)&&(t=this.appHost+t),fetch(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:p.stringify(e)}).then((function(t){return t.ok?t.json():(console.error("fetch err :"+t.status),Promise.resolve({}))}))},h.prototype.fetchGet=function(t,e){var n=new RegExp(/(http|https):\/\/\S*/);return this.appHost&&!n.test(this.appHost)&&(t=this.appHost+t),e&&(t=t+"?"+p.stringify(e)),fetch(t,{method:"GET"}).then((function(t){return t.ok?t.json():(console.error("fetch err :"+t.status),Promise.resolve({}))}))},h.prototype.decryptResponseData=function(n){return t(this,void 0,void 0,(function(){var t,r,o,i,a,p,u;return e(this,(function(e){switch(e.label){case 0:return(t=this.getHeader(n,"X-Encrypt-flag"))&&(r=n.standardResponse.data)?(p=s,u=[r,t],[4,this.options.httpClientOptions.localStorage.get(c.CLIENT_PRIVATE_KEY)]):[2,n];case 1:return[4,p.apply(void 0,u.concat([e.sent()]))];case 2:return o=e.sent(),i=o.success,a=o.result,i?(n.standardResponse.data=a,[2,n]):[2,Promise.reject("解密消息体发生错误")]}}))}))},h.prototype.request=function(n){return t(this,void 0,void 0,(function(){var t,r,s,o,i,a,p,c,u,h,l,d,f,y,v,S,E,m,C=this;return e(this,(function(e){switch(e.label){case 0:if(t=new RegExp(/(http|https):\/\/\S*/),this.appHost&&!t.test(this.appHost)&&(n.path=this.appHost+n.path),r=[],s=[],o=!0,this.interceptors.request.forEach((function(t){("function"!=typeof t.runWhen||t.runWhen(n))&&(o=o&&!!t.synchronous,r.unshift(t.onFulfilled,t.onRejected))})),this.interceptors.response.forEach((function(t){s.push(t.onFulfilled,t.onRejected)})),!o){for(a=r.length,p=s.length,c=0,u=0,i=Promise.resolve(n);c<a;)E=r[c++],m=s[c++],i=i.then(E,m);for(i=i.then((function(t){return C.httpClient.request(t)}),void 0);u<p;)E=s[u++],m=s[u++],i=i.then(E,m);return[2,i]}h=r.length,l=n,d=0,e.label=1;case 1:if(!(d<h))return[3,7];E=r[d++],f=r[d++],e.label=2;case 2:return e.trys.push([2,5,,6]),E?[4,E(l)]:[3,4];case 3:y=e.sent(),l="function"==typeof y?y.call(this,l):y,e.label=4;case 4:return[3,6];case 5:return v=e.sent(),f?(f.call(this,v),[3,7]):[2,Promise.reject(v)];case 6:return[3,1];case 7:try{S=this.httpClient.request(l)}catch(t){return[2,Promise.reject(t)]}for(d=0,h=s.length;d<h;)E=s[d++],m=s[d++],S=S.then(E,m);return[2,S]}}))}))},h.prototype.initSession=function(){return t(this,void 0,void 0,(function(){var t,n,r,s,i,a,p,u;return e(this,(function(e){switch(e.label){case 0:return e.trys.push([0,7,,8]),[4,this.postForm("/ocp/api/confidential/session",{asyKeyType:this.options.httpClientOptions.asySecureType,syKeyType:this.options.httpClientOptions.sySecureType},{encrypt:!1})];case 1:return t=e.sent(),n=t.data,r=n.sessionId,s=n.serverPublicKey,r&&s?[4,this.options.httpClientOptions.localStorage.save(c.SESSION_ID,r)]:[2,Promise.reject(new Error("初始化会话失败"))];case 2:return e.sent(),[4,this.options.httpClientOptions.localStorage.save(c.SEVER_PUBLIC_KEY,s)];case 3:return e.sent(),[4,o(this.options.httpClientOptions.asySecureType)];case 4:return i=e.sent(),a=i.publicKey,p=i.privateKey,[4,this.postForm("/ocp/api/confidential/exchange",{clientPublicKey:a},{encrypt:!0})];case 5:return e.sent(),[4,this.options.httpClientOptions.localStorage.save(c.CLIENT_PRIVATE_KEY,p)];case 6:return e.sent(),[3,8];case 7:return u=e.sent(),[2,Promise.reject(u)];case 8:return[2]}}))}))},h}();!function(t){t.ACCESS_TOKEN="_at",t.REFRESH_TOKEN="_rt",t.USER_INFO="_ui",t.SESSION_ID="_sid",t.SEVER_PUBLIC_KEY="_spk",t.CLIENT_PRIVATE_KEY="_cpk",t.TENANT_ID="_tid"}(c||(c={})),function(t){t.JSON="application/json",t.FORM="application/x-www-form-urlencoded",t.MULTIPART="multipart/form-data"}(u||(u={}));export{h as HttpClientProxy,c as TokenNames};