| 1052 | |
| 1053 | // 返回有效的令牌或 false |
| 1054 | function refreshToken(token) { |
| 1055 | return new Promise((resolve, reject) => { |
| 1056 | const decodedToken = parseJwt(token); |
| 1057 | const currentTimestamp = Math.floor(Date.now() / 1000); // 当前时间的UNIX时间戳(秒) |
| 1058 | if (decodedToken && currentTimestamp < decodedToken.exp) { |
| 1059 | resolve(token); |
| 1060 | return |
| 1061 | } |
| 1062 | |
| 1063 | // 如果令牌无效或已过期,则尝试获取新令牌 |
| 1064 | GM_xmlhttpRequest({ |
| 1065 | method: 'GET', |
| 1066 | url: "https://edge.microsoft.com/translate/auth", |
| 1067 | onload: resp => { |
| 1068 | if (resp.status === 200) { |
| 1069 | let token = resp.responseText; |
| 1070 | if (!token) { |
| 1071 | reject(resp.responseText); |
| 1072 | return; |
| 1073 | } |
| 1074 | tokenManager.setToken(transModel.microsoft, token); |
| 1075 | resolve(token); |
| 1076 | } else reject(resp.status, resp.responseText); |
| 1077 | }, |
| 1078 | onerror: error => reject(error) |
| 1079 | }); |
| 1080 | }); |
| 1081 | } |
| 1082 | |
| 1083 | |
| 1084 | // 解析 jwt,返回解析后对象 |