Monorepo for Tangled
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465import { env } from "$env/dynamic/private";
const cleanUrl = (value: string | undefined, fallback: string) => { const raw = value?.trim() || fallback; return raw.replace(/\/+$/, "");};
export type WebConfig = { bobbinUrl: string; knotMirrorUrl: string; apiUrl: string; knotResolverUrl: string; camoUrl: string; avatarUrl: string; /** the secrets camo and avatar sign with, so neither leaves the server */ camoSecret: string; avatarSecret: string;};
export type PublicWebConfig = Pick< WebConfig, "bobbinUrl" | "knotMirrorUrl" | "apiUrl" | "knotResolverUrl"> & { /** camo has a secret, so markup can route images through it */ camoEnabled: boolean;};
type WebConfigEnv = { BOBBIN_URL?: string; KNOTMIRROR_URL?: string; TANGLED_API_URL?: string; API_URL?: string; KNOT_RESOLVER_URL?: string; CAMO_URL?: string; CAMO_SHARED_SECRET?: string; AVATAR_URL?: string; AVATAR_SHARED_SECRET?: string;};
export const resolveConfig = (values: WebConfigEnv): WebConfig => ({ bobbinUrl: cleanUrl(values.BOBBIN_URL, "http://127.0.0.1:8090"), knotMirrorUrl: cleanUrl(values.KNOTMIRROR_URL, ""), apiUrl: cleanUrl(values.TANGLED_API_URL ?? values.API_URL, "http://127.0.0.1:8080"), knotResolverUrl: cleanUrl(values.KNOT_RESOLVER_URL, "https://knot1.tangled.sh"), camoUrl: cleanUrl(values.CAMO_URL, "https://camo.tangled.sh"), avatarUrl: cleanUrl(values.AVATAR_URL, "https://avatar.tangled.sh"), camoSecret: values.CAMO_SHARED_SECRET?.trim() ?? "", avatarSecret: values.AVATAR_SHARED_SECRET?.trim() ?? ""});
export const getConfig = (): WebConfig => resolveConfig(env as WebConfigEnv);
// listed one by one, so anything new in WebConfig stays private until it is// named hereexport const getPublicConfig = (): PublicWebConfig => { const config = getConfig(); return { bobbinUrl: config.bobbinUrl, knotMirrorUrl: config.knotMirrorUrl, apiUrl: config.apiUrl, knotResolverUrl: config.knotResolverUrl, camoEnabled: config.camoSecret !== "" };};