mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-23 17:19:37 +02:00
Merge pull request #11770 from overleaf/jpa-flag-403
[web] catch unexpected response status codes from user content domain GitOrigin-RevId: 654141e1be8721f92be271733aca70a7bc672973
This commit is contained in:
@@ -6,6 +6,24 @@ import { postJSON } from '../../../infrastructure/fetch-json'
|
||||
let useFallbackDomainUntil = performance.now()
|
||||
const ONE_HOUR_IN_MS = 1000 * 60 * 60
|
||||
|
||||
class MaybeBlockedByProxyError extends OError {}
|
||||
|
||||
function checkForBlockingByProxy(res: Response) {
|
||||
const statusCode = res.status
|
||||
switch (statusCode) {
|
||||
case 200: // full response
|
||||
case 206: // range response
|
||||
case 404: // file not found
|
||||
case 416: // range not found
|
||||
return
|
||||
default:
|
||||
throw new MaybeBlockedByProxyError('request might be blocked by proxy', {
|
||||
res,
|
||||
statusCode,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export async function fetchFromCompileDomain(url: string, init: RequestInit) {
|
||||
const userContentDomain = getMeta('ol-compilesUserContentDomain')
|
||||
let isUserContentDomain =
|
||||
@@ -17,9 +35,18 @@ export async function fetchFromCompileDomain(url: string, init: RequestInit) {
|
||||
url = withFallbackCompileDomain(url)
|
||||
}
|
||||
try {
|
||||
return await fetch(url, init)
|
||||
const res = await fetch(url, init)
|
||||
if (isUserContentDomain) {
|
||||
// Only throw a MaybeBlockedByProxyError when the request will be retried
|
||||
// on the fallback domain below.
|
||||
checkForBlockingByProxy(res)
|
||||
}
|
||||
return res
|
||||
} catch (err) {
|
||||
if (isNetworkError(err) && isUserContentDomain) {
|
||||
if (
|
||||
(isNetworkError(err) || err instanceof MaybeBlockedByProxyError) &&
|
||||
isUserContentDomain
|
||||
) {
|
||||
try {
|
||||
const res = await fetch(withFallbackCompileDomain(url), init)
|
||||
// Only switch to the fallback when fetch does not throw there as well.
|
||||
|
||||
Reference in New Issue
Block a user