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.4 kB ยท 44 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445import type { ServiceContext } from "./context";import { ForbiddenError } from "./errors";import type { Workspace } from "./types";
const featureWorkspaces = { "incident-management": [1, 6850],} 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 { const ids: ReadonlyArray<number> = featureWorkspaces[feature]; return ids.includes(workspace.id) || 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}`); }}