@tmsfe/tms-core 0.0.216 → 0.0.218
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/package.json +1 -1
- package/src/request.js +19 -1
- package/src/storage.js +1 -0
package/package.json
CHANGED
package/src/request.js
CHANGED
|
@@ -14,6 +14,7 @@ import { safeJsonParse } from './objUtils';
|
|
|
14
14
|
import { encryptObjInit } from './encrypt/index';
|
|
15
15
|
import reporter from './report/index';
|
|
16
16
|
import logger from './logger';
|
|
17
|
+
import storage from './storage';
|
|
17
18
|
|
|
18
19
|
// 微信底层错误重试码 600001-微信cronet组件错误 600003-网络中断 5-接口超时
|
|
19
20
|
export const RETRY_WX_ERR_NOS = [600001, 600003, 5];
|
|
@@ -431,6 +432,12 @@ export default class Request {
|
|
|
431
432
|
return await this.invokeRequest(path, param, method, header);
|
|
432
433
|
}
|
|
433
434
|
|
|
435
|
+
// 重试case2:token即将过期,静默刷新token,token有效期剩余不足一小时会返回X-Twt-Expire为1
|
|
436
|
+
const needSilentRefreshLogin = +res?.header?.['X-Twt-Expire'] === 1;
|
|
437
|
+
if (needSilentRefreshLogin) {
|
|
438
|
+
loginRefresh();
|
|
439
|
+
}
|
|
440
|
+
|
|
434
441
|
// 重试case3:处理网关框架码重试 requestRetryFlag?.gwCodeReTryPath由七彩石配置
|
|
435
442
|
const { requestRetryFlag } = wx.tmsFlagMap || {};
|
|
436
443
|
// X-Gateway-Code必须首字母大写,否则真机取不到
|
|
@@ -656,14 +663,25 @@ const isPathNeedRetryLogin = (path) => {
|
|
|
656
663
|
const isGatewayCodeNeedRetry = gatewayCode => (gatewayCode > 1 && gatewayCode <= 999) || +gatewayCode === 5000;
|
|
657
664
|
|
|
658
665
|
let refreshPromise;
|
|
666
|
+
let lastRefreshTime = 0;
|
|
667
|
+
const REFRESH_COOLDOWN = 60 * 1000; // 60秒冷却期
|
|
659
668
|
async function loginRefresh() {
|
|
669
|
+
// 冷却期内不重复刷新
|
|
670
|
+
if (Date.now() - lastRefreshTime < REFRESH_COOLDOWN) {
|
|
671
|
+
return;
|
|
672
|
+
}
|
|
660
673
|
if (!refreshPromise) {
|
|
661
674
|
// 调用runtime的login方法刷新token
|
|
662
675
|
const { tms } = getApp();
|
|
663
676
|
wx.tmsLoginPromise = undefined;
|
|
677
|
+
// 刷新登录态时清除缓存,确保重新走登录流程
|
|
678
|
+
storage.removeItem('sinanCacheUserInfo');
|
|
664
679
|
try {
|
|
665
680
|
refreshPromise = tms.login();
|
|
666
|
-
await refreshPromise;
|
|
681
|
+
const loginInfo = await refreshPromise;
|
|
682
|
+
// 刷新登录后写缓存
|
|
683
|
+
storage.setItem('sinanCacheUserInfo', loginInfo);
|
|
684
|
+
lastRefreshTime = Date.now(); // 记录最后成功刷新时间
|
|
667
685
|
// 登录成功,清除Promise
|
|
668
686
|
refreshPromise = undefined;
|
|
669
687
|
} catch (err) {
|