2 lines
2.3 KiB
JavaScript
2 lines
2.3 KiB
JavaScript
"use strict";const e=require("../common/vendor.js"),o=require("../composables/useCommon.js"),t=(n,i={},l=!0)=>{const u=n.startsWith("/")?n:`/${n}`;return new Promise(((h,d)=>{e.index.request({url:`${a()}${u}`,header:{Authorization:`Bearer ${r()}`},...i,success:async e=>{if(401===e.statusCode&&l){const{token:a}=await s(c());o.saveLoginInfo({token:a}),console.log("刷新后获取的token",a),a?(i.header={Authorization:`Bearer ${a}`},t(n,i,!1).then((e=>{h(e)})).catch((e=>{d(e)}))):d(e)}else e.data.data?h(e.data.data):h(e.data)},fail:async e=>{console.log(233333333)},complete:async e=>{console.log("请求完成",e)}})}))},s=async(o,t="/auth/refreshTokens",s=3,n=200,r=5e3)=>{const c=t.startsWith("/")?t:`/${t}`;let i=0;for(;i<s;){i++,console.log(`尝试第 ${i} 次刷新Token, refreshToken:`,o);try{return await new Promise(((t,s)=>{e.index.request({url:`${a()}${c}`,method:"POST",headers:{"Content-Type":"application/json"},data:{refreshToken:o},timeout:r,success:e=>{e.statusCode>=400?s(e):t(e.data)},fail:e=>{console.error("刷新Token失败",e),s(e)}})}))}catch(l){"AbortError"===l.name?console.error(`第 ${i} 次刷新Token超时`):console.error(`第 ${i} 次刷新Token失败`,l)}i<s&&(console.log(`等待 ${n} 毫秒后重试...`),await new Promise((e=>setTimeout(e,n))))}return console.log("刷新Token失败,已达到最大重试次数"),null},n=(t,i={},l="/file/upload")=>{const u=l.startsWith("/")?l:`/${l}`;return new Promise(((l,h)=>{e.index.uploadFile({url:`${a()}${u}`,filePath:t,name:"file",header:{Authorization:`Bearer ${r()}`},...i,success:async e=>{if(401===e.statusCode){const a=c();a||h(e);const{token:r}=await s(a);o.saveLoginInfo({token:r}),console.log("刷新后获取的token",r),r?(i.header={Authorization:`Bearer ${r}`},n(t,i).then((e=>{l(e)})).catch((e=>{h(e)}))):h(e)}else{console.log("success",e);const o=JSON.parse(e.data);o.data?l(o.data):l(o)}},fail:async e=>{if(console.log("fail",e),e){const a=c();a||h(e);const{token:r}=await s(a);o.saveLoginInfo({token:r}),console.log("刷新后获取的token",r),r?(i.header={Authorization:`Bearer ${r}`},n(t,i).then((e=>{l(e)})).catch((e=>{h(e)}))):h(e)}else h(e)}})}))},a=()=>"https://scschool.cc/api",r=()=>o.getLoginInfo().token,c=()=>o.getLoginInfo().refresh_token;exports.getBaseWsURL=()=>"wss://scschool.cc/websocket",exports.request=t,exports.uploadFile=n;
|