SponsorBlock/ci/invidiousCI.ts

31 lines
1 KiB
TypeScript
Raw Normal View History

import { InvidiousInstance, instanceMap } from "./invidiousType"
2021-11-30 21:55:26 +01:00
import * as data from "../ci/invidious_instances.json";
2021-11-30 21:55:26 +01:00
// only https servers
const mapped: instanceMap = data
.filter((i: InvidiousInstance) => i[1]?.type === "https")
.map((instance: InvidiousInstance) => {
2021-11-30 21:55:26 +01:00
return {
name: instance[0],
url: instance[1].uri,
dailyRatios: instance[1].monitor.dailyRatios,
thirtyDayUptime: instance[1]?.monitor["30dRatio"].ratio,
2021-11-30 21:55:26 +01:00
}
});
2021-11-30 21:55:26 +01:00
// reliability and sanity checks
const reliableCheck = mapped
.filter(instance => {
2021-11-30 21:55:26 +01:00
// 30d uptime >= 90%
const thirtyDayUptime = Number(instance.thirtyDayUptime) >= 90;
2021-11-30 21:55:26 +01:00
// available for at least 80/90 days
const dailyRatioCheck = instance.dailyRatios.filter(status => status.label !== "black");
return thirtyDayUptime && dailyRatioCheck.length >= 80;
2021-11-30 21:55:26 +01:00
})
// url includes name
.filter(instance => instance.url.includes(instance.name));
export function getInvidiousList(): string[] {
return reliableCheck.map(instance => instance.name).sort()
}