Hold back on maintenance or rate limiting events
This commit is contained in:
parent
d0ea2a12bc
commit
1853bd1268
2 changed files with 24 additions and 12 deletions
|
@ -1,4 +1,5 @@
|
||||||
import * as db from '../database/systems.js';
|
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
|
// Retrieves all systems information, should be called only once after registering
|
||||||
export async function init() {
|
export async function init() {
|
||||||
|
|
35
lib/api.js
35
lib/api.js
|
@ -63,20 +63,31 @@ function send_this(data) {
|
||||||
fs.writeFileSync('log', JSON.stringify({event: 'send', date: new Date(), data: data}) + '\n', {flag: 'a+'});
|
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)
|
fetch(`https://api.spacetraders.io/v2${data.request.endpoint}`, options)
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(response => {
|
.then(async response => {
|
||||||
fs.writeFileSync('log', JSON.stringify({event: 'response', date: new Date(), data: response}) + '\n', {flag: 'a+'});
|
switch(response.error?.code) {
|
||||||
return data.resolve(response);})
|
case 429: // 429 means rate limited, let's hold back for 10 seconds
|
||||||
.catch(err => {
|
await sleep(10000);
|
||||||
fs.writeFileSync('log', JSON.stringify({event: 'error', date: new Date(), data: err}) + '\n', {flag: 'a+'});
|
queue.enqueue(data, 1);
|
||||||
switch(err.cause?.code) {
|
|
||||||
case 'ECONNRESET':
|
|
||||||
send_this(data);
|
|
||||||
break;
|
|
||||||
case 'UND_ERR_CONNECT_TIMEOUT':
|
|
||||||
send_this(data);
|
|
||||||
break;
|
break;
|
||||||
default:
|
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
|
setTimeout(send_next, 400); // 333 should work, but 400 will still allow manual requests to go through during development
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue