MCPcopy Index your code
hub / github.com/scriptscat/scriptcat / refreshAccessToken

Function refreshAccessToken

packages/filesystem/auth.ts:79–117  ·  view source on GitHub ↗
(
  netDiskType: NetDiskType,
  token: Token,
  invalid: boolean | undefined,
  key: string,
  localStorageDAO: LocalStorageDAO
)

Source from the content-addressed store, hash-verified

77const authTokenPromises: Partial<Record<NetDiskType, Promise<Token>>> = {};
78
79function refreshAccessToken(
80 netDiskType: NetDiskType,
81 token: Token,
82 invalid: boolean | undefined,
83 key: string,
84 localStorageDAO: LocalStorageDAO
85) {
86 if (refreshTokenPromises[netDiskType]) {
87 return refreshTokenPromises[netDiskType];
88 }
89
90 const refreshPromiseFn = async () => {
91 const resp = await RefreshToken(netDiskType, token.refreshToken);
92 if (resp.code !== 0) {
93 await localStorageDAO.delete(key);
94 // 刷新失败,并且标记失效,尝试重新获取token
95 if (invalid) {
96 return await AuthVerify(netDiskType);
97 }
98 throw new WarpTokenError(new Error(resp.msg));
99 }
100 const newToken = {
101 accessToken: resp.data.token.access_token,
102 refreshToken: resp.data.token.refresh_token,
103 createtime: Date.now(),
104 };
105 // 更新token
106 await localStorageDAO.saveValue(key, newToken);
107 return newToken.accessToken;
108 };
109 const refreshPromise: Promise<string> = refreshPromiseFn().finally(() => {
110 if (refreshTokenPromises[netDiskType] === refreshPromise) {
111 delete refreshTokenPromises[netDiskType];
112 }
113 });
114
115 refreshTokenPromises[netDiskType] = refreshPromise;
116 return refreshPromise;
117}
118
119export async function AuthVerify(netDiskType: NetDiskType, invalid?: boolean) {
120 let token: Token | undefined = undefined;

Callers 1

AuthVerifyFunction · 0.85

Calls 1

refreshPromiseFnFunction · 0.85

Tested by

no test coverage detected