movie-web/src/setup/config.ts

132 lines
4.6 KiB
TypeScript
Raw Normal View History

import {
APP_VERSION,
BACKEND_URL,
DISCORD_LINK,
DONATION_LINK,
GITHUB_LINK,
} from "./constants";
2022-12-27 16:44:36 +01:00
2022-12-29 18:25:57 +01:00
interface Config {
2022-12-27 16:44:36 +01:00
APP_VERSION: string;
GITHUB_LINK: string;
DONATION_LINK: string;
2022-12-27 16:44:36 +01:00
DISCORD_LINK: string;
DMCA_EMAIL: string;
2023-06-23 21:58:33 +02:00
TMDB_READ_API_KEY: string;
2022-12-27 16:44:36 +01:00
CORS_PROXY_URL: string;
NORMAL_ROUTER: boolean;
2023-10-31 21:08:09 +01:00
BACKEND_URL: string;
2023-12-01 14:34:52 +01:00
DISALLOWED_IDS: string;
2023-12-19 20:41:56 +01:00
TURNSTILE_KEY: string;
2023-12-27 23:39:32 +01:00
CDN_REPLACEMENTS: string;
2024-01-16 20:28:33 +01:00
HAS_ONBOARDING: string;
ONBOARDING_CHROME_EXTENSION_INSTALL_LINK: string;
ONBOARDING_FIREFOX_EXTENSION_INSTALL_LINK: string;
2024-01-23 19:57:05 +01:00
ONBOARDING_PROXY_INSTALL_LINK: string;
ALLOW_AUTOPLAY: boolean;
2022-12-27 16:44:36 +01:00
}
2023-02-22 21:41:13 +01:00
export interface RuntimeConfig {
APP_VERSION: string;
GITHUB_LINK: string;
DONATION_LINK: string;
2023-02-22 21:41:13 +01:00
DISCORD_LINK: string;
DMCA_EMAIL: string | null;
TMDB_READ_API_KEY: string | null;
2023-02-22 21:41:13 +01:00
NORMAL_ROUTER: boolean;
PROXY_URLS: string[];
BACKEND_URL: string | null;
2023-12-01 14:34:52 +01:00
DISALLOWED_IDS: string[];
2023-12-19 20:41:56 +01:00
TURNSTILE_KEY: string | null;
2023-12-27 23:39:32 +01:00
CDN_REPLACEMENTS: Array<string[]>;
2024-01-16 20:28:33 +01:00
HAS_ONBOARDING: boolean;
ALLOW_AUTOPLAY: boolean;
ONBOARDING_CHROME_EXTENSION_INSTALL_LINK: string | null;
ONBOARDING_FIREFOX_EXTENSION_INSTALL_LINK: string | null;
2024-01-23 19:57:05 +01:00
ONBOARDING_PROXY_INSTALL_LINK: string | null;
2022-12-29 18:25:57 +01:00
}
2022-12-27 16:44:36 +01:00
const env: Record<keyof Config, undefined | string> = {
2023-06-23 21:58:33 +02:00
TMDB_READ_API_KEY: import.meta.env.VITE_TMDB_READ_API_KEY,
2022-12-27 16:44:36 +01:00
APP_VERSION: undefined,
GITHUB_LINK: undefined,
DONATION_LINK: undefined,
2022-12-27 16:44:36 +01:00
DISCORD_LINK: undefined,
ONBOARDING_CHROME_EXTENSION_INSTALL_LINK: import.meta.env
.VITE_ONBOARDING_CHROME_EXTENSION_INSTALL_LINK,
ONBOARDING_FIREFOX_EXTENSION_INSTALL_LINK: import.meta.env
.VITE_ONBOARDING_FIREFOX_EXTENSION_INSTALL_LINK,
2024-01-23 19:57:05 +01:00
ONBOARDING_PROXY_INSTALL_LINK: import.meta.env
.VITE_ONBOARDING_PROXY_INSTALL_LINK,
DMCA_EMAIL: import.meta.env.VITE_DMCA_EMAIL,
2022-12-27 16:44:36 +01:00
CORS_PROXY_URL: import.meta.env.VITE_CORS_PROXY_URL,
NORMAL_ROUTER: import.meta.env.VITE_NORMAL_ROUTER,
2023-10-31 21:08:09 +01:00
BACKEND_URL: import.meta.env.VITE_BACKEND_URL,
2023-12-01 14:34:52 +01:00
DISALLOWED_IDS: import.meta.env.VITE_DISALLOWED_IDS,
2023-12-19 20:41:56 +01:00
TURNSTILE_KEY: import.meta.env.VITE_TURNSTILE_KEY,
2023-12-27 23:39:32 +01:00
CDN_REPLACEMENTS: import.meta.env.VITE_CDN_REPLACEMENTS,
2024-01-16 20:28:33 +01:00
HAS_ONBOARDING: import.meta.env.VITE_HAS_ONBOARDING,
ALLOW_AUTOPLAY: import.meta.env.VITE_ALLOW_AUTOPLAY,
2022-12-27 16:44:36 +01:00
};
function coerceUndefined(value: string | null | undefined): string | undefined {
if (value == null) return undefined;
if (value.length === 0) return undefined;
return value;
}
2022-12-27 16:44:36 +01:00
// loads from different locations, in order: environment (VITE_{KEY}), window (public/config.js)
2023-06-23 21:58:33 +02:00
function getKeyValue(key: keyof Config): string | undefined {
const windowValue = (window as any)?.__CONFIG__?.[`VITE_${key}`];
return coerceUndefined(env[key]) ?? coerceUndefined(windowValue) ?? undefined;
2023-06-23 21:58:33 +02:00
}
function getKey(key: keyof Config): string | null;
function getKey(key: keyof Config, defaultString: string): string;
function getKey(key: keyof Config, defaultString?: string): string | null {
return getKeyValue(key)?.toString() ?? defaultString ?? null;
2023-06-23 21:58:33 +02:00
}
2022-12-27 16:44:36 +01:00
2022-12-29 18:25:57 +01:00
export function conf(): RuntimeConfig {
2022-12-27 16:44:36 +01:00
return {
APP_VERSION,
GITHUB_LINK,
DONATION_LINK,
2022-12-27 16:44:36 +01:00
DISCORD_LINK,
DMCA_EMAIL: getKey("DMCA_EMAIL"),
ONBOARDING_CHROME_EXTENSION_INSTALL_LINK: getKey(
"ONBOARDING_CHROME_EXTENSION_INSTALL_LINK",
2024-03-11 23:41:56 +01:00
"https://chromewebstore.google.com/detail/movie-web-extension/hoffoikpiofojilgpofjhnkkamfnnhmm",
),
ONBOARDING_FIREFOX_EXTENSION_INSTALL_LINK: getKey(
"ONBOARDING_FIREFOX_EXTENSION_INSTALL_LINK",
2024-03-11 23:41:56 +01:00
"https://addons.mozilla.org/en-GB/firefox/addon/movie-web-extension",
),
ONBOARDING_PROXY_INSTALL_LINK: getKey("ONBOARDING_PROXY_INSTALL_LINK"),
BACKEND_URL: getKey("BACKEND_URL", BACKEND_URL),
2023-06-23 21:58:33 +02:00
TMDB_READ_API_KEY: getKey("TMDB_READ_API_KEY"),
PROXY_URLS: getKey("CORS_PROXY_URL", "")
2023-02-22 21:41:13 +01:00
.split(",")
.map((v) => v.trim())
.filter((v) => v.length > 0),
2023-02-22 21:54:02 +01:00
NORMAL_ROUTER: getKey("NORMAL_ROUTER", "false") === "true",
2024-03-11 23:48:23 +01:00
HAS_ONBOARDING: getKey("HAS_ONBOARDING", "true") === "true",
ALLOW_AUTOPLAY: getKey("ALLOW_AUTOPLAY", "false") === "true",
TURNSTILE_KEY: getKey("TURNSTILE_KEY"),
2023-12-01 14:34:52 +01:00
DISALLOWED_IDS: getKey("DISALLOWED_IDS", "")
.split(",")
2023-12-01 23:23:06 +01:00
.map((v) => v.trim())
.filter((v) => v.length > 0), // Should be comma-seperated and contain the media type and ID, formatted like so: movie-753342,movie-753342,movie-753342
2023-12-27 23:39:32 +01:00
CDN_REPLACEMENTS: getKey("CDN_REPLACEMENTS", "")
.split(",")
.map((v) =>
v
.split(":")
.map((s) => s.trim())
.filter((s) => s.length > 0),
)
2023-12-28 00:00:14 +01:00
.filter((v) => v.length === 2), // The format is <beforeA>:<afterA>,<beforeB>:<afterB>
2022-12-27 16:44:36 +01:00
};
}