mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-09 13:07:02 +03:00
111 lines
3.2 KiB
TypeScript
111 lines
3.2 KiB
TypeScript
import fs from "fs";
|
|
import { SBSConfig } from "./types/config.model";
|
|
import packageJson from "../package.json";
|
|
|
|
const isTestMode = process.env.npm_lifecycle_script === packageJson.scripts.test;
|
|
const configFile = process.env.TEST_POSTGRES ? "ci.json"
|
|
: isTestMode ? "test.json"
|
|
: "config.json";
|
|
export const config: SBSConfig = JSON.parse(fs.readFileSync(configFile).toString("utf8"));
|
|
|
|
addDefaults(config, {
|
|
port: 80,
|
|
behindProxy: "X-Forwarded-For",
|
|
db: "./databases/sponsorTimes.db",
|
|
privateDB: "./databases/private.db",
|
|
createDatabaseIfNotExist: true,
|
|
schemaFolder: "./databases",
|
|
dbSchema: "./databases/_sponsorTimes.db.sql",
|
|
privateDBSchema: "./databases/_private.db.sql",
|
|
readOnly: false,
|
|
webhooks: [],
|
|
categoryList: ["sponsor", "selfpromo", "interaction", "intro", "outro", "preview", "music_offtopic", "filler", "poi_highlight", "chapter"],
|
|
categorySupport: {
|
|
sponsor: ["skip", "mute", "full"],
|
|
selfpromo: ["skip", "mute", "full"],
|
|
interaction: ["skip", "mute"],
|
|
intro: ["skip", "mute"],
|
|
outro: ["skip", "mute"],
|
|
preview: ["skip", "mute"],
|
|
filler: ["skip", "mute"],
|
|
music_offtopic: ["skip"],
|
|
poi_highlight: ["skip"],
|
|
chapter: ["chapter"]
|
|
},
|
|
maxNumberOfActiveWarnings: 1,
|
|
hoursAfterWarningExpires: 24,
|
|
adminUserID: "",
|
|
discordCompletelyIncorrectReportWebhookURL: null,
|
|
discordFirstTimeSubmissionsWebhookURL: null,
|
|
discordNeuralBlockRejectWebhookURL: null,
|
|
discordFailedReportChannelWebhookURL: null,
|
|
discordReportChannelWebhookURL: null,
|
|
getTopUsersCacheTimeMinutes: 0,
|
|
globalSalt: null,
|
|
mode: "",
|
|
neuralBlockURL: null,
|
|
proxySubmission: null,
|
|
rateLimit: {
|
|
vote: {
|
|
windowMs: 900000,
|
|
max: 20,
|
|
message: "Too many votes, please try again later",
|
|
statusCode: 429,
|
|
},
|
|
view: {
|
|
windowMs: 900000,
|
|
max: 20,
|
|
statusCode: 200,
|
|
message: "Too many views, please try again later",
|
|
},
|
|
rate: {
|
|
windowMs: 900000,
|
|
max: 20,
|
|
statusCode: 200,
|
|
message: "Success",
|
|
}
|
|
},
|
|
userCounterURL: null,
|
|
newLeafURLs: null,
|
|
maxRewardTimePerSegmentInSeconds: 600,
|
|
poiMinimumStartTime: 2,
|
|
postgres: null,
|
|
dumpDatabase: {
|
|
enabled: false,
|
|
minTimeBetweenMs: 60000,
|
|
appExportPath: "./docker/database-export",
|
|
postgresExportPath: "/opt/exports",
|
|
tables: [{
|
|
name: "sponsorTimes",
|
|
order: "timeSubmitted"
|
|
},
|
|
{
|
|
name: "userNames"
|
|
},
|
|
{
|
|
name: "categoryVotes"
|
|
},
|
|
{
|
|
name: "lockCategories",
|
|
},
|
|
{
|
|
name: "warnings",
|
|
order: "issueTime"
|
|
},
|
|
{
|
|
name: "vipUsers"
|
|
}]
|
|
},
|
|
diskCache: null,
|
|
crons: null
|
|
});
|
|
|
|
// Add defaults
|
|
function addDefaults(config: SBSConfig, defaults: SBSConfig) {
|
|
for (const key in defaults) {
|
|
if (!Object.prototype.hasOwnProperty.call(config, key)) {
|
|
config[key] = defaults[key];
|
|
}
|
|
}
|
|
}
|