mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-20 20:29:06 +00:00
48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { get } from "@vercel/edge-config";
|
|
import { isDevelopment } from "./utils";
|
|
|
|
type EdgeConfig = {
|
|
[domainWithDash: string]: {
|
|
features: {
|
|
[featureName in
|
|
| "requireLogin"
|
|
| "privacy"
|
|
| "browse"
|
|
| "sendToZulip"]: boolean;
|
|
};
|
|
auth_callback_url: string;
|
|
websocket_url: string;
|
|
api_url: string;
|
|
zulip_streams: string;
|
|
};
|
|
};
|
|
|
|
export type DomainConfig = EdgeConfig["domainWithDash"];
|
|
|
|
// Edge config main keys can only be alphanumeric and _ or -
|
|
export function edgeKeyToDomain(key: string) {
|
|
return key.replaceAll("_", ".");
|
|
}
|
|
|
|
export function edgeDomainToKey(domain: string) {
|
|
return domain.replaceAll(".", "_");
|
|
}
|
|
|
|
// get edge config server-side (prefer DomainContext when available), domain is the hostname
|
|
export async function getConfig(domain: string) {
|
|
if (process.env.NEXT_PUBLIC_ENV === "development") {
|
|
return require("../../config").localConfig;
|
|
}
|
|
|
|
let config = await get(edgeDomainToKey(domain));
|
|
|
|
if (typeof config !== "object") {
|
|
console.warn("No config for this domain, falling back to default");
|
|
config = await get(edgeDomainToKey("default"));
|
|
}
|
|
|
|
if (typeof config !== "object") throw Error("Error fetching config");
|
|
|
|
return config as DomainConfig;
|
|
}
|