mirror of
https://github.com/ajayyy/SponsorBlock.git
synced 2024-11-10 09:07:45 +01:00
55 lines
No EOL
1.7 KiB
TypeScript
55 lines
No EOL
1.7 KiB
TypeScript
/*
|
|
This file is only ran by GitHub Actions in order to populate the Invidious instances list
|
|
|
|
This file should not be shipped with the extension
|
|
*/
|
|
|
|
import { writeFile, existsSync } from 'fs';
|
|
import { join } from 'path';
|
|
|
|
// import file from https://api.invidious.io/instances.json
|
|
if (!existsSync(join(__dirname, "data.json"))) {
|
|
process.exit(1);
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
// @ts-ignore
|
|
import * as data from "../ci/data.json";
|
|
|
|
type instanceMap = {
|
|
name: string,
|
|
url: string,
|
|
dailyRatios: {ratio: string, label: string }[],
|
|
thirtyDayUptime: string
|
|
}[]
|
|
|
|
// only https servers
|
|
const mapped: instanceMap = data
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
.filter((i: any) => i[1]?.type === 'https')
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
.map((instance: any) => {
|
|
return {
|
|
name: instance[0],
|
|
url: instance[1].uri,
|
|
dailyRatios: instance[1].monitor.dailyRatios,
|
|
thirtyDayUptime: instance[1]?.monitor['30dRatio'].ratio,
|
|
}
|
|
})
|
|
|
|
// reliability and sanity checks
|
|
const reliableCheck = mapped
|
|
.filter((instance) => {
|
|
// 30d uptime >= 90%
|
|
const thirtyDayUptime = Number(instance.thirtyDayUptime) >= 90
|
|
// available for at least 80/90 days
|
|
const dailyRatioCheck = instance.dailyRatios.filter(status => status.label !== "black")
|
|
return (thirtyDayUptime && dailyRatioCheck.length >= 80)
|
|
})
|
|
// url includes name
|
|
.filter(instance => instance.url.includes(instance.name))
|
|
|
|
// finally map to array
|
|
const result: string[] = reliableCheck.map(instance => instance.name).sort()
|
|
writeFile(join(__dirname, "./invidiouslist.json"), JSON.stringify(result), (err) => {
|
|
if (err) return console.log(err);
|
|
}) |