learning_ai_common_plat/packages/backend-flags/src/index.ts
saravanakumardb1 0d8c0a5ffe feat(backend-flags,backend-telemetry): create shared flag registry + telemetry buffer packages
- @bytelyst/backend-flags: createFlagRegistry() with defaults, 6 tests
- @bytelyst/backend-telemetry: createTelemetryBuffer() with enabled switch, 5 tests
2026-03-20 08:02:17 -07:00

39 lines
1.1 KiB
TypeScript

/**
* In-memory feature flag registry for product backends.
*
* Products call createFlagRegistry() with their default flags,
* then use isFeatureEnabled/getAllFlags/setFlag as needed.
*/
export interface FlagRegistry {
isFeatureEnabled(flag: string, userId?: string): boolean;
getAllFlags(): Record<string, boolean>;
setFlag(flag: string, value: boolean): void;
}
export interface FlagRegistryOptions {
/** Default flag values. */
defaults: Record<string, boolean>;
/** Master switch — when false, flags are still resolved from defaults but
* the registry won't attempt remote/dynamic flag resolution (future use). */
enabled?: boolean;
}
export function createFlagRegistry(opts: FlagRegistryOptions): FlagRegistry {
const flags: Map<string, boolean> = new Map(Object.entries(opts.defaults));
return {
isFeatureEnabled(flag: string, _userId?: string): boolean {
return flags.get(flag) ?? false;
},
getAllFlags(): Record<string, boolean> {
return Object.fromEntries(flags);
},
setFlag(flag: string, value: boolean): void {
flags.set(flag, value);
},
};
}