Skip to content

Commit 6a42b67

Browse files
Merge pull request #15 from Crowdhandler/maintenance/throttle-special-treatment
Treat 429 and status 6 throttle responses as server errors that respe…
2 parents 9447142 + 4de0a5d commit 6a42b67

6 files changed

Lines changed: 24 additions & 5 deletions

File tree

dist/originOverride.zip

111 Bytes
Binary file not shown.

dist/originResponse.zip

113 Bytes
Binary file not shown.

dist/viewerRequest.zip

241 Bytes
Binary file not shown.

dist/viewerResponse.zip

0 Bytes
Binary file not shown.

handlerViewerRequest.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,19 @@ module.exports.viewerRequest = async (event) => {
245245
break;
246246
}
247247

248-
// Normal healthy response
249-
if (result.promoted !== 1 && result.status !== 2) {
248+
// Throttle response (status 6) - treated as a server error, respect failTrust setting
249+
if (result.status === 6 && failTrust === true) {
250+
redirect = false;
251+
} else if (result.status === 6) {
252+
console.error("[CH] API throttle response (status 6) - redirecting to safety net");
253+
redirect = true;
254+
if (safetyNetSlug) {
255+
redirectLocation = `https://${WREndpoint}/${safetyNetSlug}?url=${targetURL}&ch-code=${chCode}&ch-id=${result.token}&ch-public-key=${publicKey}`;
256+
} else {
257+
redirectLocation = `https://${WREndpoint}/?url=${targetURL}&ch-code=${chCode}&ch-id=${result.token}&ch-public-key=${publicKey}`;
258+
}
259+
// Normal healthy response
260+
} else if (result.promoted !== 1 && result.status !== 2) {
250261
redirect = true;
251262
redirectLocation = `https://${WREndpoint}/${result.slug}?url=${targetURL}&ch-code=${chCode}&ch-id=${result.token}&ch-public-key=${publicKey}`;
252263
// 4xx client error - always redirect to safety net (ignore failTrust)

helpers/http.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const dummyResponseData = {
2222
},
2323
};
2424

25-
// Client error response (4xx) - never triggers failTrust, always safety net
25+
// Client error response (4xx, excluding 429) - never triggers failTrust, always safety net
2626
const clientErrorResponseData = {
2727
result: {
2828
status: 2,
@@ -49,7 +49,11 @@ export const httpGET = function (options) {
4949
return new Promise(function (resolve, reject) {
5050
var req = https.request(options, function (res) {
5151
// reject on bad status
52-
if (res.statusCode >= 400 && res.statusCode < 500) {
52+
// 429 throttle is treated as a server error so failTrust is respected
53+
if (res.statusCode === 429) {
54+
console.error(`[CH] API 429: throttled`);
55+
reject(JSON.stringify(dummyResponseData));
56+
} else if (res.statusCode >= 400 && res.statusCode < 500) {
5357
console.error(`[CH] API 4xx: ${res.statusCode}`);
5458
reject(JSON.stringify(clientErrorResponseData));
5559
} else if (res.statusCode < 200 || res.statusCode >= 300) {
@@ -86,7 +90,11 @@ export const httpPOST = function (options, data) {
8690
return new Promise(function (resolve, reject) {
8791
var req = https.request(options, function (res) {
8892
// reject on bad status
89-
if (res.statusCode >= 400 && res.statusCode < 500) {
93+
// 429 throttle is treated as a server error so failTrust is respected
94+
if (res.statusCode === 429) {
95+
console.error(`[CH] API 429: throttled`);
96+
reject(JSON.stringify(dummyResponseData));
97+
} else if (res.statusCode >= 400 && res.statusCode < 500) {
9098
console.error(`[CH] API 4xx: ${res.statusCode}`);
9199
reject(JSON.stringify(clientErrorResponseData));
92100
} else if (res.statusCode < 200 || res.statusCode >= 300) {

0 commit comments

Comments
 (0)