Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
1.5 kB ยท 46 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import type { ServiceContext } from "./context";import { ForbiddenError } from "./errors";import type { Workspace } from "./types";
const featureWorkspaces = {} satisfies Record<string, ReadonlyArray<number>>;
export type Feature = keyof typeof featureWorkspaces;
export const FEATURES = Object.keys(featureWorkspaces) as Feature[];
// `OPENSTATUS_FEATURES` (comma list) turns a feature on for every workspace:// local dev, self-hosting and test runs.function featuresFromEnv(): Set<string> { const processEnv: Record<string, string | undefined> = process.env; const raw = processEnv.OPENSTATUS_FEATURES ?? ""; return new Set( raw .split(",") .map((f) => f.trim()) .filter(Boolean), );}
export function isFeatureEnabled( workspace: Pick<Workspace, "id">, feature: Feature, envFeatures: Set<string> = featuresFromEnv(),): boolean { // widened so an empty registry (`Feature` = never) still typechecks const allowlist: Record<string, ReadonlyArray<number>> = featureWorkspaces; return ( (allowlist[feature]?.includes(workspace.id) ?? false) || envFeatures.has(feature) );}
export function enabledFeatures(workspace: Pick<Workspace, "id">): Feature[] { const envFeatures = featuresFromEnv(); return FEATURES.filter((f) => isFeatureEnabled(workspace, f, envFeatures));}
export function requireFeature(ctx: ServiceContext, feature: Feature): void { if (!isFeatureEnabled(ctx.workspace, feature)) { throw new ForbiddenError(`Feature not enabled: ${feature}`); }}