100 lines
2.6 KiB
JavaScript
100 lines
2.6 KiB
JavaScript
import { writable } from "svelte/store";
|
|
import { PRIORITY } from "./http-queue";
|
|
import createScoreSaberApiQueue from "./scoresaber/api-queue";
|
|
import createScoreSaberPageQueue from "./scoresaber/page-queue";
|
|
import createBeatMapsApiQueue from "./beatmaps/api-queue";
|
|
import createBeatSaviorApiQueue from "./beatsavior/api-queue";
|
|
import createTwitchApiQueue from "./twitch/api-queue";
|
|
import createAccSaberApiQueue from "./accsaber/api-queue";
|
|
|
|
export const getResponseBody = (response) => (response ? response.body : null);
|
|
export const isResponseCached = (response) => !!(response && response.cached);
|
|
export const updateResponseBody = (response, body) =>
|
|
response ? { ...response, body } : null;
|
|
|
|
const initQueue = (queue) => {
|
|
let queueState = {
|
|
size: 0,
|
|
pending: 0,
|
|
rateLimit: { waiting: 0, remaining: null, limit: null, resetAt: null },
|
|
progress: { num: 0, count: 0, progress: 1 },
|
|
};
|
|
|
|
const { subscribe, set } = writable(queueState);
|
|
|
|
queue.on("change", ({ size, pending }) => {
|
|
const {
|
|
rateLimit: { waiting },
|
|
} = queueState;
|
|
const { remaining, limit, resetAt } = queue.getRateLimit();
|
|
queueState = {
|
|
...queueState,
|
|
size,
|
|
pending,
|
|
rateLimit: { waiting, remaining, limit, resetAt },
|
|
};
|
|
set(queueState);
|
|
});
|
|
queue.on("progress", ({ progress, num, count }) => {
|
|
const {
|
|
rateLimit: { waiting },
|
|
} = queueState;
|
|
const { remaining, limit, resetAt } = queue.getRateLimit();
|
|
queueState = {
|
|
...queueState,
|
|
progress: { num, count, progress },
|
|
rateLimit: { waiting, remaining, limit, resetAt },
|
|
};
|
|
set(queueState);
|
|
});
|
|
queue.on("waiting", ({ waiting, remaining, limit, resetAt }) => {
|
|
queueState = {
|
|
...queueState,
|
|
rateLimit: { waiting, remaining, limit, resetAt },
|
|
};
|
|
set(queueState);
|
|
});
|
|
|
|
return {
|
|
subscribe,
|
|
...queue,
|
|
};
|
|
};
|
|
|
|
export default {
|
|
SCORESABER_API: initQueue(
|
|
createScoreSaberApiQueue({ concurrency: 3, timeout: 95000 }),
|
|
),
|
|
SCORESABER_PAGE: initQueue(
|
|
createScoreSaberPageQueue({ concurrency: 3, timeout: 30000 }),
|
|
),
|
|
BEATMAPS: initQueue(
|
|
createBeatMapsApiQueue({
|
|
concurrency: 1,
|
|
timeout: 10000,
|
|
intervalCap: 10,
|
|
interval: 1000,
|
|
}),
|
|
),
|
|
BEATSAVIOR: initQueue(
|
|
createBeatSaviorApiQueue({
|
|
concurrency: 1,
|
|
timeout: 10000,
|
|
intervalCap: 60,
|
|
interval: 60000,
|
|
}),
|
|
),
|
|
TWITCH: initQueue(
|
|
createTwitchApiQueue({
|
|
concurrency: 8,
|
|
timeout: 8000,
|
|
intervalCap: 800,
|
|
interval: 60000,
|
|
}),
|
|
),
|
|
ACCSABER: initQueue(
|
|
createAccSaberApiQueue({ concurrency: 2, timeout: 10000 }),
|
|
),
|
|
PRIORITY,
|
|
};
|