1
0
Fork 0

Hold back on maintenance or rate limiting events

This commit is contained in:
Julien Dessaux 2023-06-05 23:53:08 +02:00
parent d0ea2a12bc
commit 1853bd1268
Signed by: adyxax
GPG key ID: F92E51B86E07177E
2 changed files with 24 additions and 12 deletions

View file

@ -1,4 +1,5 @@
import * as db from '../database/systems.js';
import * as api from '../lib/api.js';
// Retrieves all systems information, should be called only once after registering
export async function init() {

View file

@ -63,20 +63,31 @@ function send_this(data) {
fs.writeFileSync('log', JSON.stringify({event: 'send', date: new Date(), data: data}) + '\n', {flag: 'a+'});
fetch(`https://api.spacetraders.io/v2${data.request.endpoint}`, options)
.then(response => response.json())
.then(response => {
fs.writeFileSync('log', JSON.stringify({event: 'response', date: new Date(), data: response}) + '\n', {flag: 'a+'});
return data.resolve(response);})
.catch(err => {
fs.writeFileSync('log', JSON.stringify({event: 'error', date: new Date(), data: err}) + '\n', {flag: 'a+'});
switch(err.cause?.code) {
case 'ECONNRESET':
send_this(data);
break;
case 'UND_ERR_CONNECT_TIMEOUT':
send_this(data);
.then(async response => {
switch(response.error?.code) {
case 429: // 429 means rate limited, let's hold back for 10 seconds
await sleep(10000);
queue.enqueue(data, 1);
break;
default:
data.reject(err)
fs.writeFileSync('log', JSON.stringify({event: 'response', date: new Date(), data: response}) + '\n', {flag: 'a+'});
return data.resolve(response);
}})
.catch(async err => {
fs.writeFileSync('log', JSON.stringify({event: 'error', date: new Date(), data: err}) + '\n', {flag: 'a+'});
switch(err.cause?.code) {
case 503: // 503 means maintenance mode, let's hold back for 1 minute
await sleep(60000);
queue.enqueue(data, 1);
break;
case 'ECONNRESET':
queue.enqueue(data, 1);
break;
case 'UND_ERR_CONNECT_TIMEOUT':
queue.enqueue(data, 1);
break;
default:
data.reject(err);
}});
setTimeout(send_next, 400); // 333 should work, but 400 will still allow manual requests to go through during development
}