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

Function AuthVerify

packages/filesystem/auth.ts:119–165  ·  view source on GitHub ↗
(netDiskType: NetDiskType, invalid?: boolean)

Source from the content-addressed store, hash-verified

117}
118
119export async function AuthVerify(netDiskType: NetDiskType, invalid?: boolean) {
120 let token: Token | undefined = undefined;
121 const localStorageDAO = new LocalStorageDAO();
122 const key = `netdisk:token:${netDiskType}`;
123 try {
124 token = await localStorageDAO.getValue<Token>(key);
125 } catch (_) {
126 // ignore
127 }
128 // token不存在,或者没有accessToken,重新获取
129 if (!token || !token.accessToken) {
130 if (!authTokenPromises[netDiskType]) {
131 const authPromise = (async () => {
132 // 强制重新获取token
133 await NetDisk(netDiskType);
134 const resp = await GetNetDiskToken(netDiskType);
135 if (resp.code !== 0) {
136 throw new WarpTokenError(new Error(resp.msg));
137 }
138 const newToken = {
139 accessToken: resp.data.token.access_token,
140 refreshToken: resp.data.token.refresh_token,
141 createtime: Date.now(),
142 };
143 await localStorageDAO.saveValue(key, newToken);
144 return newToken;
145 })().finally(() => {
146 if (authTokenPromises[netDiskType] === authPromise) {
147 delete authTokenPromises[netDiskType];
148 }
149 });
150 authTokenPromises[netDiskType] = authPromise;
151 }
152 token = await authTokenPromises[netDiskType];
153 invalid = false;
154 }
155 // token未过期(一小时内)及有效则保留,不用刷新token
156 const unexpired = Date.now() < token.createtime + 3600000;
157 if (unexpired && !invalid) return token.accessToken;
158 try {
159 return await refreshAccessToken(netDiskType, token, invalid, key, localStorageDAO);
160 } catch (e) {
161 // 已过期或已被服务端判定失效的 token 不能继续回退使用
162 console.warn(e);
163 throw e;
164 }
165}
166
167export const netDiskTypeMap: Partial<Record<FileSystemType, NetDiskType>> = {
168 "baidu-netdsik": "baidu",

Callers 11

auth.test.tsFile · 0.90
verifyMethod · 0.90
retryWithFreshTokenMethod · 0.90
requestMethod · 0.90
verifyMethod · 0.90
retryWithFreshTokenMethod · 0.90
verifyMethod · 0.90
retryWithFreshTokenMethod · 0.90
verifyMethod · 0.90
requestMethod · 0.90
refreshPromiseFnFunction · 0.85

Calls 5

saveValueMethod · 0.95
NetDiskFunction · 0.85
GetNetDiskTokenFunction · 0.85
refreshAccessTokenFunction · 0.85
warnMethod · 0.80

Tested by

no test coverage detected