eirtube/utils/constants.js
2024-12-19 01:32:27 -06:00

157 lines
3.6 KiB
JavaScript
Executable File

const mixin = require("mixin-deep")
// Configuration is in the following block.
let constants = {
extra_inv_instances: [],
// The default user settings. Should be self-explanatory.
user_settings: {
instance: {
type: "string",
default: "http://localhost:3000"
},
theme: {
type: "integer",
default: 0
},
save_history: {
type: "boolean",
default: false
},
local: {
type: "integer",
default: 0
},
autoHD: {
type: "boolean",
default: 1
},
quality: {
type: "integer",
default: 0
},
recommended_mode: {
type: "integer",
default: 0
},
dearrow: {
type: "integer",
default: 1
},
dearrow_thumbnail_instance: {
type: "string",
default: "https://dearrow-thumb.ajay.app"
},
dearrow_preload: {
type: "boolean",
default: 0
},
sponsorblock: {
type: "boolean",
default: 1
},
sponsorblock_keybind: {
type: "string",
default: "b"
},
sponsorblock_sponsor: {
type: "integer",
default: 0
},
sponsorblock_selfpromo: {
type: "integer",
default: 0
},
sponsorblock_interaction: {
type: "integer",
default: 0
},
sponsorblock_intro: {
type: "integer",
default: 2
},
sponsorblock_outro: {
type: "integer",
default: 2
},
sponsorblock_preview: {
type: "integer",
default: 2
},
sponsorblock_music_offtopic: {
type: "integer",
default: 0
},
sponsorblock_filler: {
type: "integer",
default: 2
}
},
// Settings for the server to use internally.
server_setup: {
// The URL of the local NewLeaf instance, which is always used for subscription updates.
local_instance_origin: "http://localhost:3000",
// Whether users may filter videos by regular expressions. Unlike square patterns, regular expressions are _not_ bounded in complexity, so this can be used for denial of service attacks. Only enable if this is a private instance and you trust all the members.
allow_regexp_filters: false,
// Audio narration on the "can't think" page. `null` to disable narration, or a URL to enable with that audio file.
// cant_think_narration_url: null,
// Download cache related vars.
// - Eir
video_cache_max_size: (1024*1024*1024) * 10,
cache_json_max_size: (1024*1024) * 128,
time_between_cache_save_to_disk: (1000*60) * 12,
time_between_cache_cleanup: (1000*60) * 45,
time_before_ogg_delete: (1000*60) * 5,
download_queue_threads: 3,
video_dl_path: "cache/assets",
ogg_dl_path: "cache/assets/temp",
json_cache_path: "cache/json",
ytdlp_cache_path: "cache/ytdlp",
video_hq_preload_max_time: 60 * 255,
ratelimiting: {
enabled: true,
max_bucket_size: 10,
bucket_refill_rate_seconds: 60
}
},
// *** ***
// *** You shouldn't change anything below this point. ***
// *** ***
// Various caching timers.
caching: {
csrf_time: 4*60*60*1000,
seen_token_subscriptions_eligible: 40*60*60*1000,
subscriptions_refresh_loop_min: 5*60*1000,
subscriptions_refesh_fake_not_found_cooldown: 10*60*1000,
},
// Pattern matching.
regex: {
ucid: "[A-Za-z0-9-_]+",
video_id: "[A-Za-z0-9-_]{11,}"
},
// State symbols.
symbols: {
refresher: {
ACTIVE: Symbol("ACTIVE"),
WAITING: Symbol("WAITING"),
EMPTY: Symbol("EMPTY")
}
}
}
try {
const overrides = require("../config/config.js")
constants = mixin(constants, overrides)
} catch (e) {
console.error("Missing config file /config/config.js\nDocumentation: https://git.sr.ht/~cadence/tube-docs/tree/main/item/docs")
process.exit(1)
}
module.exports = constants