lgsso-sdk 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lgsso-sdk.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see lgsso-sdk.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("lgssoSdk",[],t):"object"==typeof exports?exports.lgssoSdk=t():e.lgssoSdk=t()}(this,()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function n(){var e,t,r="function"==typeof Symbol?Symbol:{},c=r.iterator||"@@iterator",i=r.toStringTag||"@@toStringTag";function u(r,n,c,i){var u=n&&n.prototype instanceof s?n:s,f=Object.create(u.prototype);return o(f,"_invoke",function(r,n,o){var c,i,u,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return c=t,i=0,u=e,p.n=r,a}};function y(r,n){for(i=r,u=n,t=0;!l&&s&&!o&&t<f.length;t++){var o,c=f[t],y=p.p,d=c[2];r>3?(o=d===n)&&(u=c[(i=c[4])?5:(i=3,3)],c[4]=c[5]=e):c[0]<=y&&((o=r<2&&y<c[1])?(i=0,p.v=n,p.n=c[1]):y<d&&(o=r<3||c[0]>n||n>d)&&(c[4]=r,c[5]=n,p.n=d,i=0))}if(o||r>1)return a;throw l=!0,n}return function(o,f,d){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&y(f,d),i=f,u=d;(t=i<2?e:u)||!l;){c||(i?i<3?(i>1&&(p.n=-1),y(i,u)):p.n=u:p.v=u);try{if(s=2,c){if(i||(o="next"),t=c[o]){if(!(t=t.call(c,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,i<2&&(i=0)}else 1===i&&(t=c.return)&&t.call(c),i<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),i=1);c=e}else if((t=(l=p.n<0)?u:r.call(n,p))!==a)break}catch(t){c=e,i=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,c,i),!0),f}var a={};function s(){}function f(){}function l(){}t=Object.getPrototypeOf;var p=[][c]?t(t([][c]())):(o(t={},c,function(){return this}),t),y=l.prototype=s.prototype=Object.create(p);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,o(e,i,"GeneratorFunction")),e.prototype=Object.create(y),e}return f.prototype=l,o(y,"constructor",l),o(l,"constructor",f),f.displayName="GeneratorFunction",o(l,i,"GeneratorFunction"),o(y),o(y,i,"Generator"),o(y,c,function(){return this}),o(y,"toString",function(){return"[object Generator]"}),(n=function(){return{w:u,m:d}})()}function o(e,t,r,n){var c=Object.defineProperty;try{c({},"",{})}catch(e){c=0}o=function(e,t,r,n){function i(t,r){o(e,t,function(e){return this._invoke(t,r,e)})}t?c?c(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(i("next",0),i("throw",1),i("return",2))},o(e,t,r,n)}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?c(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):c(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t,r,n,o,c,i){try{var u=e[c](i),a=u.value}catch(e){return void r(e)}u.done?t(a):Promise.resolve(a).then(n,o)}function s(e){return f.apply(this,arguments)}function f(){var e;return e=n().m(function e(t){var r,o,c,u,a,s,f,l,p,y,d=arguments;return n().w(function(e){for(;;)switch(e.p=e.n){case 0:if(r=d.length>1&&void 0!==d[1]?d[1]:"GET",o=d.length>2&&void 0!==d[2]?d[2]:{},c=d.length>3&&void 0!==d[3]?d[3]:{},u=d.length>4&&void 0!==d[4]?d[4]:5e3,"undefined"!=typeof window){e.n=1;break}return e.a(2,{code:-200,msg:"request方法只能在浏览器环境使用",success:!1});case 1:return a=new AbortController,s=setTimeout(function(){return a.abort()},u),"GET"!==(f={method:r.toUpperCase(),headers:i({"Content-Type":"application/json"},c),signal:a.signal}).method&&o&&(f.body=JSON.stringify(o)),e.p=2,e.n=3,fetch(t,f);case 3:if(l=e.v,clearTimeout(s),l.ok){e.n=4;break}return e.a(2,{code:l.status,msg:"HTTP请求失败: ".concat(l.statusText),success:!1});case 4:return e.p=4,e.n=5,l.json();case 5:return p=e.v,e.a(2,p);case 6:return e.p=6,e.v,e.a(2,{code:-201,msg:"响应数据不是有效的JSON格式",success:!1});case 7:if(e.p=7,y=e.v,clearTimeout(s),"AbortError"!==y.name){e.n=8;break}return e.a(2,{code:-202,msg:"请求超时(".concat(u,"ms)"),success:!1});case 8:return e.a(2,{code:-203,msg:"网络请求失败: ".concat(y.message),success:!1});case 9:return e.a(2)}},e,null,[[4,6],[2,7]])}),f=function(){var t=this,r=arguments;return new Promise(function(n,o){var c=e.apply(t,r);function i(e){a(c,n,o,i,u,"next",e)}function u(e){a(c,n,o,i,u,"throw",e)}i(void 0)})},f.apply(this,arguments)}function l(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function c(r,n,o,c){var a=n&&n.prototype instanceof u?n:u,s=Object.create(a.prototype);return p(s,"_invoke",function(r,n,o){var c,u,a,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return c=t,u=0,a=e,p.n=r,i}};function y(r,n){for(u=r,a=n,t=0;!l&&s&&!o&&t<f.length;t++){var o,c=f[t],y=p.p,d=c[2];r>3?(o=d===n)&&(a=c[(u=c[4])?5:(u=3,3)],c[4]=c[5]=e):c[0]<=y&&((o=r<2&&y<c[1])?(u=0,p.v=n,p.n=c[1]):y<d&&(o=r<3||c[0]>n||n>d)&&(c[4]=r,c[5]=n,p.n=d,u=0))}if(o||r>1)return i;throw l=!0,n}return function(o,f,d){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&y(f,d),u=f,a=d;(t=u<2?e:a)||!l;){c||(u?u<3?(u>1&&(p.n=-1),y(u,a)):p.n=a:p.v=a);try{if(s=2,c){if(u||(o="next"),t=c[o]){if(!(t=t.call(c,a)))throw TypeError("iterator result is not an object");if(!t.done)return t;a=t.value,u<2&&(u=0)}else 1===u&&(t=c.return)&&t.call(c),u<2&&(a=TypeError("The iterator does not provide a '"+o+"' method"),u=1);c=e}else if((t=(l=p.n<0)?a:r.call(n,p))!==i)break}catch(t){c=e,u=1,a=t}finally{s=1}}return{value:t,done:l}}}(r,o,c),!0),s}var i={};function u(){}function a(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(p(t={},n,function(){return this}),t),y=s.prototype=u.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,p(e,o,"GeneratorFunction")),e.prototype=Object.create(y),e}return a.prototype=s,p(y,"constructor",s),p(s,"constructor",a),a.displayName="GeneratorFunction",p(s,o,"GeneratorFunction"),p(y),p(y,o,"Generator"),p(y,n,function(){return this}),p(y,"toString",function(){return"[object Generator]"}),(l=function(){return{w:c,m:d}})()}function p(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}p=function(e,t,r,n){function c(t,r){p(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(c("next",0),c("throw",1),c("return",2))},p(e,t,r,n)}function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function d(e,t,r,n,o,c,i){try{var u=e[c](i),a=u.value}catch(e){return void r(e)}u.done?t(a):Promise.resolve(a).then(n,o)}function b(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var c=e.apply(t,r);function i(e){d(c,n,o,i,u,"next",e)}function u(e){d(c,n,o,i,u,"throw",e)}i(void 0)})}}function m(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function v(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?m(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):m(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function g(e,t,r){return(t=function(e){var t=function(e){if("object"!=y(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=y(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==y(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}e.r(t),e.d(t,{default:()=>A,getToken:()=>T,init:()=>P,logout:()=>E,removeToken:()=>C,toUrl:()=>_});var h=null;function w(){return"undefined"!=typeof window&&"undefined"!=typeof document}function O(e){return w()?new URLSearchParams(window.location.search).get(e):null}function j(e){if(w()){var t=new URLSearchParams(window.location.search);if(t.has(e)){t.delete(e);var r="".concat(window.location.pathname).concat(t.toString()?"?".concat(t.toString()):"");window.history.replaceState({},document.title,r)}}}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=v(v({},{accessCodeKey:"accessCode",tokenKey:"scm_token",timeout:5e3,headers:{},tokenApi:"",refreshCodeApi:"",logoutApi:"",logOutUrl:""}),e);if("string"!=typeof t.accessCodeKey||""===t.accessCodeKey.trim())throw new Error("accessCodeKey必须是有效的字符串");if("string"!=typeof t.tokenKey||""===t.tokenKey.trim())throw new Error("tokenKey必须是有效的字符串");return t}function P(){return k.apply(this,arguments)}function k(){return k=b(l().m(function e(){var t,r,n,o,c=arguments;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=c.length>0&&void 0!==c[0]?c[0]:{},e.p=1,h=S(t),r=O(h.accessCodeKey),!h.tokenApi||!r){e.n=3;break}return e.n=2,s(h.tokenApi,"POST",{accessCode:r},h.headers,h.timeout);case 2:return 0===(n=e.v).code&&n.data&&localStorage.setItem(h.tokenKey,n.data),j(h.accessCodeKey),e.a(2,n);case 3:return e.a(2,{code:0,msg:"初始化成功,未检测到accessCode",success:!0});case 4:return e.p=4,o=e.v,e.a(2,{code:-100,msg:"初始化失败: ".concat(o.message),success:!1})}},e,null,[[1,4]])})),k.apply(this,arguments)}function T(){return h&&w()?localStorage.getItem(h.tokenKey):null}function C(){h&&w()&&localStorage.removeItem(h.tokenKey)}function E(){return K.apply(this,arguments)}function K(){return(K=b(l().m(function e(){var t,r;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(h.logoutApi){e.n=2;break}return e.a(2,{code:-102,msg:"未配置logoutApi",success:!1});case 2:return e.p=2,e.n=3,s(h.logoutApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,T())),h.timeout);case 3:return t=e.v,C(),h.logOutUrl&&w()&&(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(encodeURIComponent(window.location.href))),e.a(2,t);case 4:return e.p=4,r=e.v,e.a(2,{code:-103,msg:"退出失败: ".concat(r.message),success:!1})}},e,null,[[2,4]])}))).apply(this,arguments)}function _(e){return G.apply(this,arguments)}function G(){return(G=b(l().m(function e(t){var r,n,o,c;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(t){e.n=2;break}return e.a(2,{code:-104,msg:"请提供跳转地址",success:!1});case 2:if(h.refreshCodeApi){e.n=3;break}return e.a(2,{code:-105,msg:"未配置refreshCodeApi",success:!1});case 3:if(r=T()){e.n=4;break}return h.logOutUrl&&w()&&(window.location.href=h.logOutUrl),e.a(2,{code:-106,msg:"未找到有效token",success:!1});case 4:return e.p=4,e.n=5,s(h.refreshCodeApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,r)),h.timeout);case 5:return 0===(n=e.v).code&&n.data&&w()&&((o=new URL(t)).searchParams.set(h.accessCodeKey,n.data),window.location.href=o.toString()),e.a(2,n);case 6:return e.p=6,c=e.v,e.a(2,{code:-107,msg:"跳转失败: ".concat(c.message),success:!1})}},e,null,[[4,6]])}))).apply(this,arguments)}const A={init:P,getToken:T,removeToken:C,logout:E,toUrl:_};return t})());
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("lgssoSdk",[],t):"object"==typeof exports?exports.lgssoSdk=t():e.lgssoSdk=t()}(this,()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function n(){var e,t,r="function"==typeof Symbol?Symbol:{},c=r.iterator||"@@iterator",i=r.toStringTag||"@@toStringTag";function u(r,n,c,i){var u=n&&n.prototype instanceof s?n:s,f=Object.create(u.prototype);return o(f,"_invoke",function(r,n,o){var c,i,u,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return c=t,i=0,u=e,p.n=r,a}};function y(r,n){for(i=r,u=n,t=0;!l&&s&&!o&&t<f.length;t++){var o,c=f[t],y=p.p,d=c[2];r>3?(o=d===n)&&(u=c[(i=c[4])?5:(i=3,3)],c[4]=c[5]=e):c[0]<=y&&((o=r<2&&y<c[1])?(i=0,p.v=n,p.n=c[1]):y<d&&(o=r<3||c[0]>n||n>d)&&(c[4]=r,c[5]=n,p.n=d,i=0))}if(o||r>1)return a;throw l=!0,n}return function(o,f,d){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&y(f,d),i=f,u=d;(t=i<2?e:u)||!l;){c||(i?i<3?(i>1&&(p.n=-1),y(i,u)):p.n=u:p.v=u);try{if(s=2,c){if(i||(o="next"),t=c[o]){if(!(t=t.call(c,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,i<2&&(i=0)}else 1===i&&(t=c.return)&&t.call(c),i<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),i=1);c=e}else if((t=(l=p.n<0)?u:r.call(n,p))!==a)break}catch(t){c=e,i=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,c,i),!0),f}var a={};function s(){}function f(){}function l(){}t=Object.getPrototypeOf;var p=[][c]?t(t([][c]())):(o(t={},c,function(){return this}),t),y=l.prototype=s.prototype=Object.create(p);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,o(e,i,"GeneratorFunction")),e.prototype=Object.create(y),e}return f.prototype=l,o(y,"constructor",l),o(l,"constructor",f),f.displayName="GeneratorFunction",o(l,i,"GeneratorFunction"),o(y),o(y,i,"Generator"),o(y,c,function(){return this}),o(y,"toString",function(){return"[object Generator]"}),(n=function(){return{w:u,m:d}})()}function o(e,t,r,n){var c=Object.defineProperty;try{c({},"",{})}catch(e){c=0}o=function(e,t,r,n){function i(t,r){o(e,t,function(e){return this._invoke(t,r,e)})}t?c?c(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(i("next",0),i("throw",1),i("return",2))},o(e,t,r,n)}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?c(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):c(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t,r,n,o,c,i){try{var u=e[c](i),a=u.value}catch(e){return void r(e)}u.done?t(a):Promise.resolve(a).then(n,o)}function s(e){return f.apply(this,arguments)}function f(){var e;return e=n().m(function e(t){var r,o,c,u,a,s,f,l,p,y,d=arguments;return n().w(function(e){for(;;)switch(e.p=e.n){case 0:if(r=d.length>1&&void 0!==d[1]?d[1]:"GET",o=d.length>2&&void 0!==d[2]?d[2]:{},c=d.length>3&&void 0!==d[3]?d[3]:{},u=d.length>4&&void 0!==d[4]?d[4]:5e3,"undefined"!=typeof window){e.n=1;break}return e.a(2,{code:-200,msg:"request方法只能在浏览器环境使用",success:!1});case 1:return a=new AbortController,s=setTimeout(function(){return a.abort()},u),"GET"!==(f={method:r.toUpperCase(),headers:i({"Content-Type":"application/json"},c),signal:a.signal}).method&&o&&(f.body=JSON.stringify(o)),e.p=2,e.n=3,fetch(t,f);case 3:if(l=e.v,clearTimeout(s),l.ok){e.n=4;break}return e.a(2,{code:l.status,msg:"HTTP请求失败: ".concat(l.statusText),success:!1});case 4:return e.p=4,e.n=5,l.json();case 5:return p=e.v,e.a(2,p);case 6:return e.p=6,e.v,e.a(2,{code:-201,msg:"响应数据不是有效的JSON格式",success:!1});case 7:if(e.p=7,y=e.v,clearTimeout(s),"AbortError"!==y.name){e.n=8;break}return e.a(2,{code:-202,msg:"请求超时(".concat(u,"ms)"),success:!1});case 8:return e.a(2,{code:-203,msg:"网络请求失败: ".concat(y.message),success:!1});case 9:return e.a(2)}},e,null,[[4,6],[2,7]])}),f=function(){var t=this,r=arguments;return new Promise(function(n,o){var c=e.apply(t,r);function i(e){a(c,n,o,i,u,"next",e)}function u(e){a(c,n,o,i,u,"throw",e)}i(void 0)})},f.apply(this,arguments)}function l(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function c(r,n,o,c){var a=n&&n.prototype instanceof u?n:u,s=Object.create(a.prototype);return p(s,"_invoke",function(r,n,o){var c,u,a,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return c=t,u=0,a=e,p.n=r,i}};function y(r,n){for(u=r,a=n,t=0;!l&&s&&!o&&t<f.length;t++){var o,c=f[t],y=p.p,d=c[2];r>3?(o=d===n)&&(a=c[(u=c[4])?5:(u=3,3)],c[4]=c[5]=e):c[0]<=y&&((o=r<2&&y<c[1])?(u=0,p.v=n,p.n=c[1]):y<d&&(o=r<3||c[0]>n||n>d)&&(c[4]=r,c[5]=n,p.n=d,u=0))}if(o||r>1)return i;throw l=!0,n}return function(o,f,d){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&y(f,d),u=f,a=d;(t=u<2?e:a)||!l;){c||(u?u<3?(u>1&&(p.n=-1),y(u,a)):p.n=a:p.v=a);try{if(s=2,c){if(u||(o="next"),t=c[o]){if(!(t=t.call(c,a)))throw TypeError("iterator result is not an object");if(!t.done)return t;a=t.value,u<2&&(u=0)}else 1===u&&(t=c.return)&&t.call(c),u<2&&(a=TypeError("The iterator does not provide a '"+o+"' method"),u=1);c=e}else if((t=(l=p.n<0)?a:r.call(n,p))!==i)break}catch(t){c=e,u=1,a=t}finally{s=1}}return{value:t,done:l}}}(r,o,c),!0),s}var i={};function u(){}function a(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(p(t={},n,function(){return this}),t),y=s.prototype=u.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,p(e,o,"GeneratorFunction")),e.prototype=Object.create(y),e}return a.prototype=s,p(y,"constructor",s),p(s,"constructor",a),a.displayName="GeneratorFunction",p(s,o,"GeneratorFunction"),p(y),p(y,o,"Generator"),p(y,n,function(){return this}),p(y,"toString",function(){return"[object Generator]"}),(l=function(){return{w:c,m:d}})()}function p(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}p=function(e,t,r,n){function c(t,r){p(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(c("next",0),c("throw",1),c("return",2))},p(e,t,r,n)}function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function d(e,t,r,n,o,c,i){try{var u=e[c](i),a=u.value}catch(e){return void r(e)}u.done?t(a):Promise.resolve(a).then(n,o)}function b(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var c=e.apply(t,r);function i(e){d(c,n,o,i,u,"next",e)}function u(e){d(c,n,o,i,u,"throw",e)}i(void 0)})}}function m(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function v(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?m(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):m(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function g(e,t,r){return(t=function(e){var t=function(e){if("object"!=y(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=y(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==y(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}e.r(t),e.d(t,{default:()=>G,getToken:()=>T,init:()=>P,logout:()=>E,removeToken:()=>C,toUrl:()=>_});var h=null;function w(){return"undefined"!=typeof window&&"undefined"!=typeof document}function O(e){return w()?new URLSearchParams(window.location.search).get(e):null}function j(e){if(w()){var t=new URLSearchParams(window.location.search);if(t.has(e)){t.delete(e);var r="".concat(window.location.pathname).concat(t.toString()?"?".concat(t.toString()):"");window.history.replaceState({},document.title,r)}}}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=v(v({},{accessCodeKey:"accessCode",tokenKey:"scm_token",timeout:5e3,headers:{},tokenApi:"",refreshCodeApi:"",logoutApi:"",logOutUrl:""}),e);if("string"!=typeof t.accessCodeKey||""===t.accessCodeKey.trim())throw new Error("accessCodeKey必须是有效的字符串");if("string"!=typeof t.tokenKey||""===t.tokenKey.trim())throw new Error("tokenKey必须是有效的字符串");return t}function P(){return k.apply(this,arguments)}function k(){return k=b(l().m(function e(){var t,r,n,o,c=arguments;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=c.length>0&&void 0!==c[0]?c[0]:{},e.p=1,h=S(t),r=O(h.accessCodeKey),h.tokenApi){e.n=2;break}return e.a(2,{code:-100,msg:"缺少tokenApi",success:!1});case 2:if(!h.tokenApi||!r){e.n=4;break}return e.n=3,s(h.tokenApi,"POST",{accessCode:r},h.headers,h.timeout);case 3:return 0===(n=e.v).code&&n.data&&localStorage.setItem(h.tokenKey,n.data),j(h.accessCodeKey),setTimeout(function(){j(h.accessCodeKey)},300),e.a(2,n);case 4:T()||(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(window.location.href));case 5:return e.a(2,{code:0,msg:"",success:!0});case 6:return e.p=6,o=e.v,e.a(2,{code:-100,msg:"初始化失败: ".concat(o.message),success:!1})}},e,null,[[1,6]])})),k.apply(this,arguments)}function T(){return h&&w()?localStorage.getItem(h.tokenKey):null}function C(){h&&w()&&localStorage.removeItem(h.tokenKey)}function E(){return K.apply(this,arguments)}function K(){return(K=b(l().m(function e(){var t,r;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(h.logoutApi){e.n=2;break}return e.a(2,{code:-102,msg:"未配置logoutApi",success:!1});case 2:return e.p=2,e.n=3,s(h.logoutApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,T())),h.timeout);case 3:return t=e.v,C(),h.logOutUrl&&w()&&(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(window.location.href)),e.a(2,t);case 4:return e.p=4,r=e.v,e.a(2,{code:-103,msg:"退出失败: ".concat(r.message),success:!1})}},e,null,[[2,4]])}))).apply(this,arguments)}function _(e){return A.apply(this,arguments)}function A(){return(A=b(l().m(function e(t){var r,n,o,c;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(t){e.n=2;break}return e.a(2,{code:-104,msg:"请提供跳转地址",success:!1});case 2:if(h.refreshCodeApi){e.n=3;break}return e.a(2,{code:-105,msg:"未配置refreshCodeApi",success:!1});case 3:if(r=T()){e.n=4;break}return h.logOutUrl&&w()&&(window.location.href=h.logOutUrl),e.a(2,{code:-106,msg:"未找到有效token",success:!1});case 4:return e.p=4,e.n=5,s(h.refreshCodeApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,r)),h.timeout);case 5:return 0===(n=e.v).code&&n.data&&w()&&((o=new URL(t)).searchParams.set(h.accessCodeKey,n.data),window.location.href=o.toString()),e.a(2,n);case 6:return e.p=6,c=e.v,e.a(2,{code:-107,msg:"跳转失败: ".concat(c.message),success:!1})}},e,null,[[4,6]])}))).apply(this,arguments)}const G={init:P,getToken:T,removeToken:C,logout:E,toUrl:_};return t})());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lgsso-sdk",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "LG SSO登录工具库,处理单点登录、token管理和系统间跳转",
5
5
  "main": "dist/lgsso-sdk.js",
6
6
  "types": "src/index.d.ts",
@@ -28,4 +28,4 @@
28
28
  "@babel/core": "^7.22.9",
29
29
  "@babel/preset-env": "^7.22.9"
30
30
  }
31
- }
31
+ }
package/src/index.js CHANGED
@@ -1,264 +1,274 @@
1
- import { request } from './api';
2
-
3
- // 私有配置存储
4
- let config = null;
5
-
6
- /**
7
- * 检查是否在浏览器环境
8
- */
9
- function isBrowser() {
10
- return typeof window !== 'undefined' && typeof document !== 'undefined';
11
- }
12
-
13
- /**
14
- * 解析URL中的查询参数
15
- * @param {string} name - 参数名
16
- * @returns {string|null} 参数值
17
- */
18
- function getQueryParam(name) {
19
- if (!isBrowser()) return null;
20
- const params = new URLSearchParams(window.location.search);
21
- return params.get(name);
22
- }
23
-
24
- /**
25
- * 移除URL中的指定参数(无痕修改)
26
- * @param {string} name - 参数名
27
- */
28
- function removeQueryParam(name) {
29
- if (!isBrowser()) return;
30
-
31
- const params = new URLSearchParams(window.location.search);
32
- if (params.has(name)) {
33
- params.delete(name);
34
- const newUrl = `${window.location.pathname}${params.toString() ? `?${params.toString()}` : ''}`;
35
- window.history.replaceState({}, document.title, newUrl);
36
- }
37
- }
38
-
39
- /**
40
- * 验证并合并配置
41
- * @param {Object} options - 用户配置
42
- * @returns {Object} 合并后的配置
43
- */
44
- function validateAndMergeConfig(options = {}) {
45
- const defaults = {
46
- accessCodeKey: 'accessCode',
47
- tokenKey: 'scm_token',
48
- timeout: 5000,
49
- headers: {},
50
- tokenApi: '',
51
- refreshCodeApi: '',
52
- logoutApi: '',
53
- logOutUrl: ''
54
- };
55
-
56
- // 合并配置
57
- const merged = { ...defaults, ...options };
58
-
59
- // 基础验证
60
- if (typeof merged.accessCodeKey !== 'string' || merged.accessCodeKey.trim() === '') {
61
- throw new Error('accessCodeKey必须是有效的字符串');
62
- }
63
- if (typeof merged.tokenKey !== 'string' || merged.tokenKey.trim() === '') {
64
- throw new Error('tokenKey必须是有效的字符串');
65
- }
66
-
67
- return merged;
68
- }
69
-
70
- /**
71
- * 初始化SDK
72
- * @param {Object} options - 配置参数
73
- * @returns {Promise<Object>} 接口返回结果
74
- */
75
- export async function init(options = {}) {
76
- try {
77
- // 验证配置
78
- config = validateAndMergeConfig(options);
79
-
80
- // 从URL获取accessCode
81
- const accessCode = getQueryParam(config.accessCodeKey);
82
-
83
- // 若配置了tokenApi且存在accessCode,自动换取token
84
- if (config.tokenApi && accessCode) {
85
- const result = await request(
86
- config.tokenApi,
87
- 'POST',
88
- { accessCode },
89
- config.headers,
90
- config.timeout
91
- );
92
-
93
- // 无论code是否为0,只要返回了token就存储
94
- if (result.code === 0 && result.data) {
95
- localStorage.setItem(config.tokenKey, result.data);
96
- }
97
-
98
- // 移除URL中的accessCode
99
- removeQueryParam(config.accessCodeKey);
100
-
101
- return result;
102
- }
103
-
104
- // 没有accessCode的情况
105
- return {
106
- code: 0,
107
- msg: '初始化成功,未检测到accessCode',
108
- success: true
109
- };
110
- } catch (error) {
111
- return {
112
- code: -100,
113
- msg: `初始化失败: ${error.message}`,
114
- success: false
115
- };
116
- }
117
- }
118
-
119
- /**
120
- * 获取localStorage中的token
121
- * @returns {string|null} token值
122
- */
123
- export function getToken() {
124
- if (!config || !isBrowser()) return null;
125
- return localStorage.getItem(config.tokenKey);
126
- }
127
-
128
- /**
129
- * 删除localStorage中的token
130
- */
131
- export function removeToken() {
132
- if (!config || !isBrowser()) return;
133
- localStorage.removeItem(config.tokenKey);
134
- }
135
-
136
- /**
137
- * 退出登录
138
- * @returns {Promise<Object>} 接口返回结果
139
- */
140
- export async function logout() {
141
- if (!config) {
142
- return {
143
- code: -101,
144
- msg: '请先调用init方法初始化',
145
- success: false
146
- };
147
- }
148
-
149
- if (!config.logoutApi) {
150
- return {
151
- code: -102,
152
- msg: '未配置logoutApi',
153
- success: false
154
- };
155
- }
156
-
157
- try {
158
- // 调用退出接口
159
- const result = await request(
160
- config.logoutApi,
161
- 'POST',
162
- {},
163
- { ...config.headers, [config.tokenKey]: getToken() },
164
- config.timeout
165
- );
166
-
167
- // 无论接口返回如何,都删除本地token
168
- removeToken();
169
-
170
- // 跳转到退出地址
171
- if (config.logOutUrl && isBrowser()) {
172
- window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(window.location.href)}`;
173
- }
174
-
175
- return result;
176
- } catch (error) {
177
- return {
178
- code: -103,
179
- msg: `退出失败: ${error.message}`,
180
- success: false
181
- };
182
- }
183
- }
184
-
185
- /**
186
- * 用token换取新accessCode并跳转
187
- * @param {string} redirectUrl - 目标跳转地址
188
- * @returns {Promise<Object>} 接口返回结果
189
- */
190
- export async function toUrl(redirectUrl) {
191
- if (!config) {
192
- return {
193
- code: -101,
194
- msg: '请先调用init方法初始化',
195
- success: false
196
- };
197
- }
198
-
199
- if (!redirectUrl) {
200
- return {
201
- code: -104,
202
- msg: '请提供跳转地址',
203
- success: false
204
- };
205
- }
206
-
207
- if (!config.refreshCodeApi) {
208
- return {
209
- code: -105,
210
- msg: '未配置refreshCodeApi',
211
- success: false
212
- };
213
- }
214
-
215
- // 获取当前token
216
- const token = getToken();
217
- if (!token) {
218
- // 没有token时跳转到登录页
219
- if (config.logOutUrl && isBrowser()) {
220
- window.location.href = config.logOutUrl;
221
- }
222
- return {
223
- code: -106,
224
- msg: '未找到有效token',
225
- success: false
226
- };
227
- }
228
-
229
- try {
230
- // 调用接口换取新accessCode
231
- const result = await request(
232
- config.refreshCodeApi,
233
- 'POST',
234
- {},
235
- { ...config.headers, [config.tokenKey]: token },
236
- config.timeout
237
- );
238
-
239
- // 成功获取code后跳转
240
- if (result.code === 0 && result.data && isBrowser()) {
241
- const url = new URL(redirectUrl);
242
- url.searchParams.set(config.accessCodeKey, result.data);
243
- window.location.href = url.toString();
244
- }
245
-
246
- return result;
247
- } catch (error) {
248
- return {
249
- code: -107,
250
- msg: `跳转失败: ${error.message}`,
251
- success: false
252
- };
253
- }
254
- }
255
-
256
- // 默认导出
257
- export default {
258
- init,
259
- getToken,
260
- removeToken,
261
- logout,
262
- toUrl
263
- };
264
-
1
+ import { request } from './api';
2
+
3
+ // 私有配置存储
4
+ let config = null;
5
+
6
+ /**
7
+ * 检查是否在浏览器环境
8
+ */
9
+ function isBrowser() {
10
+ return typeof window !== 'undefined' && typeof document !== 'undefined';
11
+ }
12
+
13
+ /**
14
+ * 解析URL中的查询参数
15
+ * @param {string} name - 参数名
16
+ * @returns {string|null} 参数值
17
+ */
18
+ function getQueryParam(name) {
19
+ if (!isBrowser()) return null;
20
+ const params = new URLSearchParams(window.location.search);
21
+ return params.get(name);
22
+ }
23
+
24
+ /**
25
+ * 移除URL中的指定参数(无痕修改)
26
+ * @param {string} name - 参数名
27
+ */
28
+ function removeQueryParam(name) {
29
+ if (!isBrowser()) return;
30
+
31
+ const params = new URLSearchParams(window.location.search);
32
+ if (params.has(name)) {
33
+ params.delete(name);
34
+ const newUrl = `${window.location.pathname}${params.toString() ? `?${params.toString()}` : ''}`;
35
+ window.history.replaceState({}, document.title, newUrl);
36
+ }
37
+ }
38
+
39
+ /**
40
+ * 验证并合并配置
41
+ * @param {Object} options - 用户配置
42
+ * @returns {Object} 合并后的配置
43
+ */
44
+ function validateAndMergeConfig(options = {}) {
45
+ const defaults = {
46
+ accessCodeKey: 'accessCode',
47
+ tokenKey: 'scm_token',
48
+ timeout: 5000,
49
+ headers: {},
50
+ tokenApi: '',
51
+ refreshCodeApi: '',
52
+ logoutApi: '',
53
+ logOutUrl: ''
54
+ };
55
+
56
+ // 合并配置
57
+ const merged = { ...defaults, ...options };
58
+
59
+ // 基础验证
60
+ if (typeof merged.accessCodeKey !== 'string' || merged.accessCodeKey.trim() === '') {
61
+ throw new Error('accessCodeKey必须是有效的字符串');
62
+ }
63
+ if (typeof merged.tokenKey !== 'string' || merged.tokenKey.trim() === '') {
64
+ throw new Error('tokenKey必须是有效的字符串');
65
+ }
66
+
67
+ return merged;
68
+ }
69
+
70
+ /**
71
+ * 初始化SDK
72
+ * @param {Object} options - 配置参数
73
+ * @returns {Promise<Object>} 接口返回结果
74
+ */
75
+ export async function init(options = {}) {
76
+ try {
77
+ // 验证配置
78
+ config = validateAndMergeConfig(options);
79
+
80
+ // 从URL获取accessCode
81
+ const accessCode = getQueryParam(config.accessCodeKey);
82
+ if (!config.tokenApi) {
83
+ return {
84
+ code: -100,
85
+ msg: `缺少tokenApi`,
86
+ success: false
87
+ };
88
+ }
89
+ // 若配置了tokenApi且存在accessCode,自动换取token
90
+ if (config.tokenApi && accessCode) {
91
+ const result = await request(
92
+ config.tokenApi,
93
+ 'POST',
94
+ { accessCode },
95
+ config.headers,
96
+ config.timeout
97
+ );
98
+
99
+ // 无论code是否为0,只要返回了token就存储
100
+ if (result.code === 0 && result.data) {
101
+ localStorage.setItem(config.tokenKey, result.data);
102
+ }
103
+ removeQueryParam(config.accessCodeKey);
104
+ setTimeout(() => {
105
+ // 移除URL中的accessCode
106
+ removeQueryParam(config.accessCodeKey);
107
+ }, 300)
108
+ return result;
109
+ }
110
+ else if (!getToken()) {
111
+ window.location.href = `${config.logOutUrl}?redirect_uri=${window.location.href}`;
112
+ }
113
+
114
+ // 没有accessCode的情况
115
+ return {
116
+ code: 0,
117
+ msg: '',
118
+ success: true
119
+ };
120
+ } catch (error) {
121
+ return {
122
+ code: -100,
123
+ msg: `初始化失败: ${error.message}`,
124
+ success: false
125
+ };
126
+ }
127
+ }
128
+
129
+ /**
130
+ * 获取localStorage中的token
131
+ * @returns {string|null} token值
132
+ */
133
+ export function getToken() {
134
+ if (!config || !isBrowser()) return null;
135
+ return localStorage.getItem(config.tokenKey);
136
+ }
137
+
138
+ /**
139
+ * 删除localStorage中的token
140
+ */
141
+ export function removeToken() {
142
+ if (!config || !isBrowser()) return;
143
+ localStorage.removeItem(config.tokenKey);
144
+ }
145
+
146
+ /**
147
+ * 退出登录
148
+ * @returns {Promise<Object>} 接口返回结果
149
+ */
150
+ export async function logout() {
151
+ if (!config) {
152
+ return {
153
+ code: -101,
154
+ msg: '请先调用init方法初始化',
155
+ success: false
156
+ };
157
+ }
158
+
159
+ if (!config.logoutApi) {
160
+ return {
161
+ code: -102,
162
+ msg: '未配置logoutApi',
163
+ success: false
164
+ };
165
+ }
166
+
167
+ try {
168
+ // 调用退出接口
169
+ const result = await request(
170
+ config.logoutApi,
171
+ 'POST',
172
+ {},
173
+ { ...config.headers, [config.tokenKey]: getToken() },
174
+ config.timeout
175
+ );
176
+
177
+ // 无论接口返回如何,都删除本地token
178
+ removeToken();
179
+
180
+ // 跳转到退出地址
181
+ if (config.logOutUrl && isBrowser()) {
182
+ window.location.href = `${config.logOutUrl}?redirect_uri=${window.location.href}`;
183
+ }
184
+
185
+ return result;
186
+ } catch (error) {
187
+ return {
188
+ code: -103,
189
+ msg: `退出失败: ${error.message}`,
190
+ success: false
191
+ };
192
+ }
193
+ }
194
+
195
+ /**
196
+ * 用token换取新accessCode并跳转
197
+ * @param {string} redirectUrl - 目标跳转地址
198
+ * @returns {Promise<Object>} 接口返回结果
199
+ */
200
+ export async function toUrl(redirectUrl) {
201
+ if (!config) {
202
+ return {
203
+ code: -101,
204
+ msg: '请先调用init方法初始化',
205
+ success: false
206
+ };
207
+ }
208
+
209
+ if (!redirectUrl) {
210
+ return {
211
+ code: -104,
212
+ msg: '请提供跳转地址',
213
+ success: false
214
+ };
215
+ }
216
+
217
+ if (!config.refreshCodeApi) {
218
+ return {
219
+ code: -105,
220
+ msg: '未配置refreshCodeApi',
221
+ success: false
222
+ };
223
+ }
224
+
225
+ // 获取当前token
226
+ const token = getToken();
227
+ if (!token) {
228
+ // 没有token时跳转到登录页
229
+ if (config.logOutUrl && isBrowser()) {
230
+ window.location.href = config.logOutUrl;
231
+ }
232
+ return {
233
+ code: -106,
234
+ msg: '未找到有效token',
235
+ success: false
236
+ };
237
+ }
238
+
239
+ try {
240
+ // 调用接口换取新accessCode
241
+ const result = await request(
242
+ config.refreshCodeApi,
243
+ 'POST',
244
+ {},
245
+ { ...config.headers, [config.tokenKey]: token },
246
+ config.timeout
247
+ );
248
+
249
+ // 成功获取code后跳转
250
+
251
+ if (result.code === 0 && result.data && isBrowser()) {
252
+ const url = new URL(redirectUrl);
253
+ url.searchParams.set(config.accessCodeKey, result.data);
254
+ window.location.href = url.toString();
255
+ }
256
+
257
+ return result;
258
+ } catch (error) {
259
+ return {
260
+ code: -107,
261
+ msg: `跳转失败: ${error.message}`,
262
+ success: false
263
+ };
264
+ }
265
+ }
266
+
267
+ // 默认导出
268
+ export default {
269
+ init,
270
+ getToken,
271
+ removeToken,
272
+ logout,
273
+ toUrl
274
+ };