mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-20 20:29:06 +00:00
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import { get } from "@vercel/edge-config";
|
|
import { isDevelopment } from "./utils";
|
|
|
|
const localConfig = {
|
|
features: {
|
|
requireLogin: false,
|
|
privacy: true,
|
|
browse: false,
|
|
sendToZulip: true,
|
|
},
|
|
api_url: "http://127.0.0.1:1250",
|
|
websocket_url: "ws://127.0.0.1:1250",
|
|
auth_callback_url: "http://localhost:3000/auth-callback",
|
|
zulip_streams: "https://d3ow1y42gqfmk.cloudfront.net",
|
|
};
|
|
|
|
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 (isDevelopment()) {
|
|
return 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;
|
|
}
|