monkeytype/frontend/vite-plugins/env-config.ts
eikomaniac 7a17ba25ec
feat(frontend): add feature flag for tribe multiplayer (@eikomaniac) (#7234)
### Description

Adds a tribeEnabled feature flag to gate tribe multiplayer
functionality.

# Note
Once this PR is approved and merged into `newtribemerge`,
`newtribemerge` can safely be merged into `master`

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2025-12-14 15:30:38 +01:00

59 lines
1.8 KiB
TypeScript

import { Plugin } from "vite";
import { EnvConfig } from "virtual:env-config";
const virtualModuleId = "virtual:env-config";
const resolvedVirtualModuleId = "\0" + virtualModuleId;
export function envConfig(options: {
isDevelopment: boolean;
clientVersion: string;
env: Record<string, string>;
}): Plugin {
return {
name: "virtual-env-config",
resolveId(id) {
if (id === virtualModuleId) return resolvedVirtualModuleId;
return;
},
load(id) {
if (id === resolvedVirtualModuleId) {
const devConfig: EnvConfig = {
isDevelopment: true,
backendUrl: fallback(
options.env["BACKEND_URL"],
"http://localhost:5005",
),
clientVersion: options.clientVersion,
recaptchaSiteKey: "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI",
quickLoginEmail: options.env["QUICK_LOGIN_EMAIL"],
quickLoginPassword: options.env["QUICK_LOGIN_PASSWORD"],
forceTribe: options.env["FORCE_TRIBE"] === "true",
};
const prodConfig: EnvConfig = {
isDevelopment: false,
backendUrl: fallback(
options.env["BACKEND_URL"],
"https://api.monkeytype.com",
),
recaptchaSiteKey: options.env["RECAPTCHA_SITE_KEY"] ?? "",
quickLoginEmail: undefined,
quickLoginPassword: undefined,
clientVersion: options.clientVersion,
forceTribe: options.env["FORCE_TRIBE"] === "true",
};
const envConfig = options.isDevelopment ? devConfig : prodConfig;
return `
export const envConfig = ${JSON.stringify(envConfig)};
`;
}
return;
},
};
}
function fallback(value: string | undefined | null, fallback: string): string {
if (value === null || value === undefined || value === "") return fallback;
return value;
}