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, }