1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-14 00:19:16 +01:00
unleash.unleash/src/lib/features/frontend-api/frontend-api-repository.ts
2024-03-11 17:30:46 +01:00

71 lines
1.9 KiB
TypeScript

import EventEmitter from 'events';
import { RepositoryInterface } from 'unleash-client/lib/repository';
import { Segment } from 'unleash-client/lib/strategy/strategy';
import {
EnhancedFeatureInterface,
FeatureInterface,
} from 'unleash-client/lib/feature';
import { IApiUser } from '../../types/api-user';
import { IUnleashConfig } from '../../types';
import { UnleashEvents } from 'unleash-client';
import { Logger } from '../../logger';
import { GlobalFrontendApiCache } from './global-frontend-api-cache';
type Config = Pick<IUnleashConfig, 'getLogger'>;
export class FrontendApiRepository
extends EventEmitter
implements RepositoryInterface
{
private readonly config: Config;
private readonly logger: Logger;
private readonly token: IApiUser;
private globalFrontendApiCache: GlobalFrontendApiCache;
private running: boolean;
constructor(
config: Config,
globalFrontendApiCache: GlobalFrontendApiCache,
token: IApiUser,
) {
super();
this.config = config;
this.logger = config.getLogger('frontend-api-repository.ts');
this.token = token;
this.globalFrontendApiCache = globalFrontendApiCache;
}
getTogglesWithSegmentData(): EnhancedFeatureInterface[] {
// TODO: add real implementation
return [];
}
getSegment(id: number): Segment | undefined {
return this.globalFrontendApiCache.getSegment(id);
}
getToggle(name: string): FeatureInterface {
//@ts-ignore (we must update the node SDK to allow undefined)
return this.globalFrontendApiCache.getToggle(name, this.token);
}
getToggles(): FeatureInterface[] {
return this.globalFrontendApiCache.getToggles(this.token);
}
async start(): Promise<void> {
this.running = true;
this.emit(UnleashEvents.Ready);
this.emit(UnleashEvents.Changed);
}
stop(): void {
this.running = false;
}
}