@smart100/spu-web-plugin 1.0.7 → 1.0.8

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.
@@ -1,4 +1,4 @@
1
- var version = "1.0.7";
1
+ var version = "1.0.8";
2
2
 
3
3
  /** Detect free variable `global` from Node.js. */
4
4
  var freeGlobal$2 = typeof global == 'object' && global && global.Object === Object && global;
@@ -16169,95 +16169,6 @@ function setRefreshToken(value) {
16169
16169
  function removeRefreshToken() {
16170
16170
  removeData('refreshtoken');
16171
16171
  }
16172
- function updateToken() {
16173
- var loginState = getLoginState();
16174
- if (!loginState.islogin && loginState.type <= 1) {
16175
- console.warn('当前未登录/token过期,不支持自动刷新token。');
16176
- return false;
16177
- }
16178
- if (loginState.role === 'center') {
16179
- console.warn('当前登录为产品运营中心用户,不支持自动刷新token。');
16180
- return false;
16181
- }
16182
- var token = getToken();
16183
- var refreshtoken = getRefreshToken();
16184
- var sendToken = checkLoginByToken(token) ? token : refreshtoken;
16185
- return normalAxios$1.get('/api/auth/refreshtoken', {
16186
- params: {
16187
- refreshtoken: sendToken
16188
- },
16189
- isShowLoading: false,
16190
- isShowErrorMessage: false,
16191
- isSendToken: false,
16192
- isSendTecode: true,
16193
- headers: {
16194
- token: sendToken
16195
- }
16196
- }).then(function (res) {
16197
- // console.log(res)
16198
- var data = res === null || res === void 0 ? void 0 : res.data;
16199
- if (data) {
16200
- setToken(data.token);
16201
- setRefreshToken(data.refreshtoken);
16202
- setTokenExpires(data.tokenexpires);
16203
- }
16204
- });
16205
- }
16206
- var refreshtokenTimer = null;
16207
- function startRefreshtoken() {
16208
- var loginState = getLoginState();
16209
- // 如果是产品运营中心 则不走刷新token流程
16210
- if (loginState.role === 'center') {
16211
- console.warn('当前登录为产品运营中心用户,不支持自动刷新token。');
16212
- return false;
16213
- }
16214
- // stopRefreshtoken()
16215
- clearTimeout(refreshtokenTimer);
16216
- refreshtokenTimer = null;
16217
- // 如果有登录 但 refreshtoken 不是完整 token 则10秒后【需要等单点登录走完后才刷新不然会被覆盖】刷新一次取到完整 token
16218
- // 如果有登录 且 refreshtoken 是完整 token 如果剩余时间大于10分钟 则每隔10分钟刷一次 否则过期前15秒更新 token
16219
- // 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
16220
- var time = 0;
16221
- if (loginState.islogin) {
16222
- var user = getUserByToken(getRefreshToken());
16223
- if (user !== null && user !== void 0 && user.tokenId) {
16224
- time = Number(getTokenExpires()) - Date.now() - 1000 * 15;
16225
- // 如果剩余时间大于10分钟 则每隔10分钟刷一次
16226
- if (time > 600000) {
16227
- time = 600000;
16228
- } else if (time < 0) {
16229
- time = 0;
16230
- }
16231
- } else {
16232
- time = 10000;
16233
- }
16234
- } else {
16235
- if (loginState.type === 2) {
16236
- time = 0;
16237
- } else {
16238
- time = 10000;
16239
- }
16240
- }
16241
- // time = 5000
16242
- refreshtokenTimer = window.setTimeout( /*#__PURE__*/_asyncToGenerator$1( /*#__PURE__*/_regeneratorRuntime$1().mark(function _callee() {
16243
- return _regeneratorRuntime$1().wrap(function _callee$(_context) {
16244
- while (1) switch (_context.prev = _context.next) {
16245
- case 0:
16246
- if (!(getLoginState().type >= 2)) {
16247
- _context.next = 3;
16248
- break;
16249
- }
16250
- _context.next = 3;
16251
- return updateToken();
16252
- case 3:
16253
- startRefreshtoken();
16254
- case 4:
16255
- case "end":
16256
- return _context.stop();
16257
- }
16258
- }, _callee);
16259
- })), time);
16260
- }
16261
16172
  function getUser(key) {
16262
16173
  var user = getData('user');
16263
16174
  var userObj = user ? JSON.parse(user) : null;
@@ -16620,6 +16531,96 @@ function _requestAndSetTenantSetting() {
16620
16531
  function removeTenantSetting() {
16621
16532
  lsProxy.removeItem('tenantsetting');
16622
16533
  }
16534
+ function updateToken() {
16535
+ var loginState = getLoginState();
16536
+ if (!loginState.islogin && loginState.type <= 1) {
16537
+ console.warn('当前未登录/token过期,不支持自动刷新token。');
16538
+ return false;
16539
+ }
16540
+ if (loginState.role === 'center') {
16541
+ console.warn('当前登录为产品运营中心用户,不支持自动刷新token。');
16542
+ return false;
16543
+ }
16544
+ var token = getToken();
16545
+ var refreshtoken = getRefreshToken();
16546
+ var sendToken = checkLoginByToken(token) ? token : refreshtoken;
16547
+ return normalAxios$1.get('/api/auth/refreshtoken', {
16548
+ params: {
16549
+ refreshtoken: sendToken
16550
+ },
16551
+ isShowLoading: false,
16552
+ isShowErrorMessage: false,
16553
+ isSendToken: false,
16554
+ isSendTecode: true,
16555
+ headers: {
16556
+ token: sendToken
16557
+ }
16558
+ }).then(function (res) {
16559
+ // console.log(res)
16560
+ var data = res === null || res === void 0 ? void 0 : res.data;
16561
+ if (data) {
16562
+ setToken(data.token);
16563
+ setRefreshToken(data.refreshtoken);
16564
+ setTokenExpires(data.tokenexpires);
16565
+ }
16566
+ });
16567
+ }
16568
+ var refreshtokenTimer = null;
16569
+ function startRefreshtoken() {
16570
+ var loginState = getLoginState();
16571
+ // 如果是产品运营中心 则不走刷新token流程
16572
+ if (loginState.role === 'center') {
16573
+ console.warn('当前登录为产品运营中心用户,不支持自动刷新token。');
16574
+ return false;
16575
+ }
16576
+ // stopRefreshtoken()
16577
+ clearTimeout(refreshtokenTimer);
16578
+ refreshtokenTimer = null;
16579
+ // 如果有登录 但 refreshtoken 不是完整 token 则10秒后【需要等单点登录走完后才刷新不然会被覆盖】刷新一次取到完整 token
16580
+ // 如果有登录 且 refreshtoken 是完整 token 如果剩余时间大于10分钟 则每隔10分钟刷一次 否则过期前15秒更新 token
16581
+ // 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
16582
+ var time = 0;
16583
+ if (loginState.islogin) {
16584
+ var user = getUserByToken(getRefreshToken());
16585
+ if (user !== null && user !== void 0 && user.tokenId) {
16586
+ time = Number(getTokenExpires()) - Date.now() - 1000 * 15;
16587
+ // 如果剩余时间大于10分钟 则每隔10分钟刷一次
16588
+ if (time > 600000) {
16589
+ time = 600000;
16590
+ } else if (time < 0) {
16591
+ time = 0;
16592
+ }
16593
+ } else {
16594
+ time = 10000;
16595
+ }
16596
+ } else {
16597
+ if (loginState.type === 2) {
16598
+ time = 0;
16599
+ } else {
16600
+ console.error('未登录,10秒后尝试更新token');
16601
+ time = 30000;
16602
+ }
16603
+ }
16604
+ // time = 5000
16605
+ refreshtokenTimer = window.setTimeout( /*#__PURE__*/_asyncToGenerator$1( /*#__PURE__*/_regeneratorRuntime$1().mark(function _callee() {
16606
+ return _regeneratorRuntime$1().wrap(function _callee$(_context) {
16607
+ while (1) switch (_context.prev = _context.next) {
16608
+ case 0:
16609
+ if (!(getLoginState().type >= 2)) {
16610
+ _context.next = 3;
16611
+ break;
16612
+ }
16613
+ _context.next = 3;
16614
+ return updateToken();
16615
+ case 3:
16616
+ startRefreshtoken();
16617
+ case 4:
16618
+ case "end":
16619
+ return _context.stop();
16620
+ }
16621
+ }, _callee);
16622
+ })), time);
16623
+ }
16623
16624
  // 单点登录
16624
16625
  function singleLogin(_x3) {
16625
16626
  return _singleLogin.apply(this, arguments);
@@ -16648,7 +16649,7 @@ function _singleLogin() {
16648
16649
  envname = query.envname;
16649
16650
  context = query.context;
16650
16651
  if (!checkLoginByToken(token)) {
16651
- _context6.next = 48;
16652
+ _context6.next = 60;
16652
16653
  break;
16653
16654
  }
16654
16655
  isneedlogin = true; // 是否需要走单点登录流程
@@ -16670,91 +16671,104 @@ function _singleLogin() {
16670
16671
  // isneedlogin = true
16671
16672
  // debugger
16672
16673
  if (!isneedlogin) {
16673
- _context6.next = 46;
16674
+ _context6.next = 58;
16674
16675
  break;
16675
16676
  }
16676
16677
  setBaseInfo();
16677
- // 单点登录写入 token 之后 换取完整的 refreshtoken
16678
- try {
16679
- if (checkLogin()) {
16680
- refreshTokenUser = getUserByToken(getRefreshToken());
16681
- tokenUser = getUserByToken(getToken());
16682
- if (!(refreshTokenUser !== null && refreshTokenUser !== void 0 && refreshTokenUser.tokenId) && tokenUser !== null && tokenUser !== void 0 && tokenUser.tokenId) {
16683
- updateToken();
16684
- }
16685
- }
16686
- } catch (err) {
16687
- console.error(err);
16678
+ // 单点登录写入 token 之后
16679
+ // 1、如果 refreshtoken 不完整 则换取完整的 refreshtoken
16680
+ _context6.prev = 14;
16681
+ if (!checkLogin()) {
16682
+ _context6.next = 21;
16683
+ break;
16688
16684
  }
16685
+ refreshTokenUser = getUserByToken(getRefreshToken());
16686
+ tokenUser = getUserByToken(getToken());
16687
+ if (!(!(refreshTokenUser !== null && refreshTokenUser !== void 0 && refreshTokenUser.tokenId) && tokenUser !== null && tokenUser !== void 0 && tokenUser.tokenId)) {
16688
+ _context6.next = 21;
16689
+ break;
16690
+ }
16691
+ _context6.next = 21;
16692
+ return updateToken();
16693
+ case 21:
16694
+ _context6.next = 26;
16695
+ break;
16696
+ case 23:
16697
+ _context6.prev = 23;
16698
+ _context6.t0 = _context6["catch"](14);
16699
+ console.error(_context6.t0);
16700
+ case 26:
16701
+ // 2、重新计算刷新 token 时间 因为刚开始进入就 startRefreshtoken 检测到没有 token 会过10秒才执行刷新 token 操作
16702
+ startRefreshtoken();
16689
16703
  // 获取环境信息和租户配置信息
16690
- _context6.next = 17;
16704
+ _context6.next = 29;
16691
16705
  return getEnvname();
16692
- case 17:
16706
+ case 29:
16693
16707
  nowEnvname = _context6.sent;
16694
16708
  if (!nowEnvname) {
16695
- _context6.next = 38;
16709
+ _context6.next = 50;
16696
16710
  break;
16697
16711
  }
16698
- _context6.next = 21;
16712
+ _context6.next = 33;
16699
16713
  return requestEnvdata(nowEnvname);
16700
- case 21:
16714
+ case 33:
16701
16715
  envData = _context6.sent;
16702
16716
  if (!envData) {
16703
- _context6.next = 34;
16717
+ _context6.next = 46;
16704
16718
  break;
16705
16719
  }
16706
16720
  saveEnvdata(envData);
16707
16721
  if (!envData.tenantcode) {
16708
- _context6.next = 30;
16722
+ _context6.next = 42;
16709
16723
  break;
16710
16724
  }
16711
16725
  setTecode(envData.tenantcode);
16712
16726
  // 租户配置
16713
- _context6.next = 28;
16727
+ _context6.next = 40;
16714
16728
  return requestAndSetTenantSetting(envData.tenantcode);
16715
- case 28:
16716
- _context6.next = 32;
16729
+ case 40:
16730
+ _context6.next = 44;
16717
16731
  break;
16718
- case 30:
16732
+ case 42:
16719
16733
  removeTenantSetting();
16720
16734
  removeTecode();
16721
- case 32:
16722
- _context6.next = 36;
16735
+ case 44:
16736
+ _context6.next = 48;
16723
16737
  break;
16724
- case 34:
16738
+ case 46:
16725
16739
  removeEnvdata();
16726
16740
  removeTecode();
16727
- case 36:
16728
- _context6.next = 40;
16741
+ case 48:
16742
+ _context6.next = 52;
16729
16743
  break;
16730
- case 38:
16744
+ case 50:
16731
16745
  removeEnvdata();
16732
16746
  removeTecode();
16733
- case 40:
16734
- _context6.next = 42;
16747
+ case 52:
16748
+ _context6.next = 54;
16735
16749
  return getAndSetTenant();
16736
- case 42:
16737
- _context6.next = 44;
16750
+ case 54:
16751
+ _context6.next = 56;
16738
16752
  return getAndSetUserInfo();
16739
- case 44:
16753
+ case 56:
16740
16754
  // 单点登录后 获取 web 开发者模式 如果是则设置 isdebugger
16741
16755
  urlquery.dealWebDebugger();
16742
16756
  flag = true;
16743
- case 46:
16744
- _context6.next = 51;
16757
+ case 58:
16758
+ _context6.next = 63;
16745
16759
  break;
16746
- case 48:
16760
+ case 60:
16747
16761
  flag = false;
16748
16762
  setBaseInfo(); // 传递的token过期依然写入 如果不写入的话 有可能之前的token本来没过期 页面依然可用
16749
16763
  console.error('单点登录失败,请检查链接所传 token/refreshtoken/tokenexpires 是否非法或过期。');
16750
- case 51:
16764
+ case 63:
16751
16765
  if (!flag) {
16752
- _context6.next = 54;
16766
+ _context6.next = 66;
16753
16767
  break;
16754
16768
  }
16755
- _context6.next = 54;
16769
+ _context6.next = 66;
16756
16770
  return core$1.initGetData();
16757
- case 54:
16771
+ case 66:
16758
16772
  if (flag) {
16759
16773
  // 单点登录成功 需要删除 query 中相关参数
16760
16774
  token && delete query.token;
@@ -16767,11 +16781,11 @@ function _singleLogin() {
16767
16781
  flag: flag,
16768
16782
  query: query
16769
16783
  });
16770
- case 56:
16784
+ case 68:
16771
16785
  case "end":
16772
16786
  return _context6.stop();
16773
16787
  }
16774
- }, _callee6);
16788
+ }, _callee6, null, [[14, 23]]);
16775
16789
  }));
16776
16790
  return _singleLogin.apply(this, arguments);
16777
16791
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smart100/spu-web-plugin",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "dev": "npm run build:types && rollup -c -w",
package/src/login.ts CHANGED
@@ -63,93 +63,6 @@ function removeRefreshToken() {
63
63
  removeData('refreshtoken')
64
64
  }
65
65
 
66
- function updateToken() {
67
- const loginState = getLoginState()
68
-
69
- if (!loginState.islogin && loginState.type <= 1) {
70
- console.warn('当前未登录/token过期,不支持自动刷新token。')
71
- return false
72
- }
73
-
74
- if (loginState.role === 'center') {
75
- console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
76
- return false
77
- }
78
-
79
- const token = getToken()
80
- const refreshtoken = getRefreshToken()
81
- const sendToken = checkLoginByToken(token) ? token : refreshtoken
82
- return axios
83
- .get('/api/auth/refreshtoken', {
84
- params: {
85
- refreshtoken: sendToken
86
- },
87
- isShowLoading: false,
88
- isShowErrorMessage: false,
89
- isSendToken: false,
90
- isSendTecode: true,
91
- headers: {
92
- token: sendToken
93
- }
94
- })
95
- .then((res: any) => {
96
- // console.log(res)
97
- const data = res?.data
98
- if (data) {
99
- setToken(data.token)
100
- setRefreshToken(data.refreshtoken)
101
- setTokenExpires(data.tokenexpires)
102
- }
103
- })
104
- }
105
-
106
- let refreshtokenTimer: number | null = null
107
-
108
- function startRefreshtoken() {
109
- const loginState = getLoginState()
110
- // 如果是产品运营中心 则不走刷新token流程
111
- if (loginState.role === 'center') {
112
- console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
113
- return false
114
- }
115
-
116
- // stopRefreshtoken()
117
- clearTimeout(refreshtokenTimer as number)
118
- refreshtokenTimer = null
119
-
120
- // 如果有登录 但 refreshtoken 不是完整 token 则10秒后【需要等单点登录走完后才刷新不然会被覆盖】刷新一次取到完整 token
121
- // 如果有登录 且 refreshtoken 是完整 token 如果剩余时间大于10分钟 则每隔10分钟刷一次 否则过期前15秒更新 token
122
- // 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
123
- let time = 0
124
- if (loginState.islogin) {
125
- const user = getUserByToken(getRefreshToken())
126
- if (user?.tokenId) {
127
- time = Number(getTokenExpires()) - Date.now() - 1000 * 15
128
- // 如果剩余时间大于10分钟 则每隔10分钟刷一次
129
- if (time > 600000) {
130
- time = 600000
131
- } else if (time < 0) {
132
- time = 0
133
- }
134
- } else {
135
- time = 10000
136
- }
137
- } else {
138
- if (loginState.type === 2) {
139
- time = 0
140
- } else {
141
- time = 10000
142
- }
143
- }
144
- // time = 5000
145
- refreshtokenTimer = window.setTimeout(async () => {
146
- if (getLoginState().type >= 2) {
147
- await updateToken()
148
- }
149
- startRefreshtoken()
150
- }, time)
151
- }
152
-
153
66
  function getUser(key?: string): any {
154
67
  const user = getData('user')
155
68
  const userObj = user ? JSON.parse(user) : null
@@ -479,6 +392,97 @@ function removeTenantSetting() {
479
392
  lsProxy.removeItem('tenantsetting')
480
393
  }
481
394
 
395
+
396
+ function updateToken() {
397
+ const loginState = getLoginState()
398
+
399
+ if (!loginState.islogin && loginState.type <= 1) {
400
+ console.warn('当前未登录/token过期,不支持自动刷新token。')
401
+ return false
402
+ }
403
+
404
+ if (loginState.role === 'center') {
405
+ console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
406
+ return false
407
+ }
408
+
409
+ const token = getToken()
410
+ const refreshtoken = getRefreshToken()
411
+ const sendToken = checkLoginByToken(token) ? token : refreshtoken
412
+ return axios
413
+ .get('/api/auth/refreshtoken', {
414
+ params: {
415
+ refreshtoken: sendToken
416
+ },
417
+ isShowLoading: false,
418
+ isShowErrorMessage: false,
419
+ isSendToken: false,
420
+ isSendTecode: true,
421
+ headers: {
422
+ token: sendToken
423
+ }
424
+ })
425
+ .then((res: any) => {
426
+ // console.log(res)
427
+ const data = res?.data
428
+ if (data) {
429
+ setToken(data.token)
430
+ setRefreshToken(data.refreshtoken)
431
+ setTokenExpires(data.tokenexpires)
432
+ }
433
+ })
434
+ }
435
+
436
+ let refreshtokenTimer: number | null = null
437
+
438
+ function startRefreshtoken() {
439
+ const loginState = getLoginState()
440
+ // 如果是产品运营中心 则不走刷新token流程
441
+ if (loginState.role === 'center') {
442
+ console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
443
+ return false
444
+ }
445
+
446
+ // stopRefreshtoken()
447
+ clearTimeout(refreshtokenTimer as number)
448
+ refreshtokenTimer = null
449
+
450
+ // 如果有登录 但 refreshtoken 不是完整 token 则10秒后【需要等单点登录走完后才刷新不然会被覆盖】刷新一次取到完整 token
451
+ // 如果有登录 且 refreshtoken 是完整 token 如果剩余时间大于10分钟 则每隔10分钟刷一次 否则过期前15秒更新 token
452
+ // 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
453
+ let time = 0
454
+ if (loginState.islogin) {
455
+ const user = getUserByToken(getRefreshToken())
456
+ if (user?.tokenId) {
457
+ time = Number(getTokenExpires()) - Date.now() - 1000 * 15
458
+ // 如果剩余时间大于10分钟 则每隔10分钟刷一次
459
+ if (time > 600000) {
460
+ time = 600000
461
+ } else if (time < 0) {
462
+ time = 0
463
+ }
464
+ } else {
465
+ time = 10000
466
+ }
467
+ } else {
468
+ if (loginState.type === 2) {
469
+ time = 0
470
+ } else {
471
+ console.error('未登录,10秒后尝试更新token')
472
+ time = 30000
473
+ }
474
+ }
475
+ // time = 5000
476
+ refreshtokenTimer = window.setTimeout(async () => {
477
+ if (getLoginState().type >= 2) {
478
+ await updateToken()
479
+ }
480
+ startRefreshtoken()
481
+ }, time)
482
+ }
483
+
484
+
485
+
482
486
  // 单点登录
483
487
  async function singleLogin(query: IAny) {
484
488
  query = cloneDeep(query)
@@ -530,18 +534,21 @@ async function singleLogin(query: IAny) {
530
534
  if (isneedlogin) {
531
535
  setBaseInfo()
532
536
 
533
- // 单点登录写入 token 之后 换取完整的 refreshtoken
537
+ // 单点登录写入 token 之后
538
+ // 1、如果 refreshtoken 不完整 则换取完整的 refreshtoken
534
539
  try {
535
540
  if (checkLogin()) {
536
541
  const refreshTokenUser = getUserByToken(getRefreshToken())
537
542
  const tokenUser = getUserByToken(getToken())
538
543
  if (!refreshTokenUser?.tokenId && tokenUser?.tokenId) {
539
- updateToken()
544
+ await updateToken()
540
545
  }
541
546
  }
542
547
  } catch (err) {
543
548
  console.error(err)
544
549
  }
550
+ // 2、重新计算刷新 token 时间 因为刚开始进入就 startRefreshtoken 检测到没有 token 会过10秒才执行刷新 token 操作
551
+ startRefreshtoken()
545
552
 
546
553
  // 获取环境信息和租户配置信息
547
554
  const nowEnvname = await getEnvname()