in packages/hub/src/utils/XetBlob.ts [593:662]
async function getAccessToken(
initialAccessToken: string | undefined,
customFetch: typeof fetch,
refreshUrl: string
): Promise<{ accessToken: string; casUrl: string }> {
const key = cacheKey({ refreshUrl, initialAccessToken });
const jwt = jwts.get(key);
if (jwt && jwt.expiresAt > new Date(Date.now() + JWT_SAFETY_PERIOD)) {
return { accessToken: jwt.accessToken, casUrl: jwt.casUrl };
}
// If we already have a promise for this repo, return it
const existingPromise = jwtPromises.get(key);
if (existingPromise) {
return existingPromise;
}
const promise = (async () => {
const resp = await customFetch(refreshUrl, {
headers: {
...(initialAccessToken
? {
Authorization: `Bearer ${initialAccessToken}`,
}
: {}),
},
});
if (!resp.ok) {
throw new Error(`Failed to get JWT token: ${resp.status} ${await resp.text()}`);
}
const json: { accessToken: string; casUrl: string; exp: number } = await resp.json();
const jwt = {
accessToken: json.accessToken,
expiresAt: new Date(json.exp * 1000),
initialAccessToken,
refreshUrl,
casUrl: json.casUrl,
};
jwtPromises.delete(key);
for (const [key, value] of jwts.entries()) {
if (value.expiresAt < new Date(Date.now() + JWT_SAFETY_PERIOD)) {
jwts.delete(key);
} else {
break;
}
}
if (jwts.size >= JWT_CACHE_SIZE) {
const keyToDelete = jwts.keys().next().value;
if (keyToDelete) {
jwts.delete(keyToDelete);
}
}
jwts.set(key, jwt);
return {
accessToken: json.accessToken,
casUrl: json.casUrl,
};
})();
jwtPromises.set(key, promise);
return promise;
}