veza/apps/web/src/config/features.ts

68 lines
1.6 KiB
TypeScript
Raw Normal View History

/**
* Feature Flags Configuration
*
* Controls which features are enabled/disabled for MVP.
* Features marked as false are not yet implemented in the backend.
*
* TODO: Move these to environment variables or backend config after MVP.
*/
export const FEATURES = {
/**
* Two-Factor Authentication
* Backend endpoints: /api/v1/2fa/* (NOT IMPLEMENTED)
*/
TWO_FACTOR_AUTH: false,
/**
* Playlist Collaboration Features
* Backend endpoints: /api/v1/playlists/:id/collaborators, /playlists/search, /playlists/:id/share, /playlists/recommendations (NOT IMPLEMENTED)
*/
PLAYLIST_COLLABORATION: false,
PLAYLIST_SEARCH: false,
PLAYLIST_SHARE: false,
PLAYLIST_RECOMMENDATIONS: false,
/**
* HLS Streaming
* Backend endpoints: /api/v1/tracks/:id/hls/info, /api/v1/tracks/:id/hls/status (NOT IMPLEMENTED)
*/
HLS_STREAMING: false,
/**
* Role Management
* Backend endpoints: /api/v1/users/:userId/roles, /api/v1/roles/* (NOT IMPLEMENTED)
*/
ROLE_MANAGEMENT: false,
/**
* Notifications API
* Backend endpoints: /api/v1/notifications/* (NOT IMPLEMENTED)
*/
NOTIFICATIONS: false,
} as const;
/**
* Type for feature flags
*/
export type FeatureFlag = keyof typeof FEATURES;
/**
* Check if a feature is enabled
*/
export function isFeatureEnabled(feature: FeatureFlag): boolean {
return Boolean(FEATURES[feature]);
}
/**
* Assert that a feature is enabled, throw error if not
*/
export function requireFeature(feature: FeatureFlag): void {
if (!isFeatureEnabled(feature)) {
throw new Error(
`Feature "${feature}" is not enabled. This feature is not available in the MVP.`,
);
}
}