티스토리 수익 글 보기
Was this helpful?
get company():
| undefined
| {
[k: string]: any; avatar: string;
id: undefined | string | number;
name: string;
}get otherContext():
| undefined
| Record<string, any>get user():
| undefined
| {
[k: string]: any; avatar: string;
email: string;
id: undefined | string | number;
name: string;
}bindClient(context: ContextWithTracking): BoundReflagClientflush(): Promise<void>getFlag<TKey>(key: TKey): FlaggetFlagRemote(key: string): Promise<Flag>getFlags(): Record<string, Flag>getFlagsForBootstrap(): BootstrappedFlagsgetFlagsRemote(): Promise<Record<string, Flag>>refreshFlags(waitForVersion?: number): Promise<void>track(event: string, options?: TrackOptions & {
companyId: string;
}): Promise<void>// set the REFLAG_SECRET_KEY environment variable or pass the secret key in the constructor
const client = new EdgeClient();
// evaluate a flag
const context = {
user: { id: "user-id" },
company: { id: "company-id" },
}
const { isEnabled } = client.getFlag(context, "flag-key");
new EdgeClient(options: EdgeClientOptions): EdgeClientset flagOverrides(overrides:
| Partial<Record<string, FlagOverride>>
| FlagOverridesFn): voidbindClient(context: ContextWithTracking): BoundReflagClientclearFlagOverrides(): voidclient.clearFlagOverrides();destroy(): voidflush(): Promise<void>getFlag<TKey>(__namedParameters: ContextWithTracking, key: TKey): FlaggetFlagDefinitions(): FlagDefinition[]getFlagRemote<TKey>(
key: TKey,
userId?: IdType,
companyId?: IdType,
additionalContext?: Context): Promise<Flag>getFlags(options: ContextWithTracking): Record<string, Flag>getFlagsForBootstrap(options: ContextWithTracking): BootstrappedFlagsgetFlagsRemote(
userId?: IdType,
companyId?: IdType,
additionalContext?: Context): Promise<Record<string, Flag>>initialize(): Promise<void>pushFlagOverrides(overrides:
| Partial<Record<string, FlagOverride>>
| FlagOverridesFn): () => voidlet remove: (() => void) | undefined;
beforeEach(() => {
remove = client.pushFlagOverrides({ "flag-1": true });
});
afterEach(() => {
remove?.();
remove = undefined;
});refreshFlags(waitForVersion?: number): Promise<void>setFlagOverrides(overrides:
| Partial<Record<string, FlagOverride>>
| FlagOverridesFn): voidclient.setFlagOverrides({
"flag-1": true,
"flag-2": false,
});track(
userId: IdType,
event: string,
options?: TrackOptions & {
companyId: IdType;
}): Promise<void>updateCompany(companyId: IdType, options?: TrackOptions & {
userId: IdType;
}): Promise<void>updateUser(userId: IdType, options?: TrackOptions): Promise<void>// set the REFLAG_SECRET_KEY environment variable or pass the secret key to the constructor
const client = new ReflagClient();
// evaluate a flag
const isFlagEnabled = client.getFlag("flag-key", {
user: { id: "user-id" },
company: { id: "company-id" },
});new ReflagClient(options: ClientOptions): ReflagClientset flagOverrides(overrides:
| Partial<Record<string, FlagOverride>>
| FlagOverridesFn): voidbindClient(context: ContextWithTracking): BoundReflagClientclearFlagOverrides(): voidclient.clearFlagOverrides();destroy(): voidflush(): Promise<void>getFlag<TKey>(__namedParameters: ContextWithTracking, key: TKey): FlaggetFlagDefinitions(): FlagDefinition[]getFlagRemote<TKey>(
key: TKey,
userId?: IdType,
companyId?: IdType,
additionalContext?: Context): Promise<Flag>getFlags(options: ContextWithTracking): Record<string, Flag>getFlagsForBootstrap(options: ContextWithTracking): BootstrappedFlagsgetFlagsRemote(
userId?: IdType,
companyId?: IdType,
additionalContext?: Context): Promise<Record<string, Flag>>initialize(): Promise<void>pushFlagOverrides(overrides:
| Partial<Record<string, FlagOverride>>
| FlagOverridesFn): () => voidlet remove: (() => void) | undefined;
beforeEach(() => {
remove = client.pushFlagOverrides({ "flag-1": true });
});
afterEach(() => {
remove?.();
remove = undefined;
});refreshFlags(waitForVersion?: number): Promise<void>setFlagOverrides(overrides:
| Partial<Record<string, FlagOverride>>
| FlagOverridesFn): voidclient.setFlagOverrides({
"flag-1": true,
"flag-2": false,
});track(
userId: IdType,
event: string,
options?: TrackOptions & {
companyId: IdType;
}): Promise<void>updateCompany(companyId: IdType, options?: TrackOptions & {
userId: IdType;
}): Promise<void>updateUser(userId: IdType, options?: TrackOptions): Promise<void>track(): Promise<void>load(context: FlagsFallbackProviderContext): Promise<undefined | FlagsFallbackSnapshot>save(context: FlagsFallbackProviderContext, snapshot: FlagsFallbackSnapshot): Promise<void>get<TResponse>(
url: string,
headers: Record<string, string>,
timeoutMs: number): Promise<HttpClientResponse<TResponse>>post<TBody, TResponse>(
url: string,
headers: Record<string, string>,
body: TBody): Promise<HttpClientResponse<TResponse>>type Attributes = Record<string, any>;type BatchBufferOptions<T> = {
flushHandler: (items: T[]) => Promise<void>;
flushOnExit: boolean;
intervalMs: number;
logger: Logger;
maxSize: number;
};type BootstrappedFlags = {
context: Context;
flags: RawFlags;
flagStateVersion: number;
};type CacheStrategy = "periodically-update" | "in-request";type ClientOptions = {
apiBaseUrl: string;
batchOptions: Omit<BatchBufferOptions<any>, "flushHandler" | "logger">;
cacheStrategy: CacheStrategy;
configFile: string;
emitEvaluationEvents: boolean;
fallbackFlags: | TypedFlagKey[]
| Record<TypedFlagKey, Exclude<FlagOverride, false>>;
fetchTimeoutMs: number;
flagOverrides: | FlagOverrides
| (context: Context) => FlagOverrides;
flagsFallbackProvider: FlagsFallbackProvider;
flagsFetchRetries: number;
flagsPushUrl: string;
flagsSyncMode: FlagsSyncMode;
host: string;
httpClient: HttpClient;
logger: Logger;
logLevel: LogLevel;
offline: boolean;
secretKey: string;
};type Context = {
company: {
[k: string]: any; avatar: string;
id: string | number | undefined;
name: string;
};
other: Record<string, any>;
user: {
[k: string]: any; avatar: string;
email: string;
id: string | number | undefined;
name: string;
};
};type EdgeClientOptions = Omit<ClientOptions, "flagsSyncMode" | "cacheStrategy" | "flushIntervalMs" | "batchOptions">;type EmptyFlagRemoteConfig = {
key: undefined;
payload: undefined;
};type FileFallbackProviderOptions = {
directory: string;
};type FlagAPIResponse = {
config: {
variants: FlagConfigVariant[];
version: number;
};
description: string | null;
key: string;
targeting: {
rules: {
filter: RuleFilter;
}[];
version: number;
};
};type FlagConfigVariant = {
filter: RuleFilter;
key: string;
payload: any;
};type FlagDefinition = {
config: {
variants: FlagConfigVariant[];
version: number;
};
description: string | null;
flag: {
rules: {
filter: RuleFilter;
}[];
version: number;
};
key: string;
};type FlagOverride =
| FlagType & {
config: {
key: string;
};
isEnabled: boolean;
}
| boolean;type FlagOverrides = Partial<keyof Flags extends never ? Record<string, FlagOverride> : { [FlagKey in keyof Flags]: Flags[FlagKey] extends FlagOverride ? Flags[FlagKey] : Exclude<FlagOverride, "config"> }>;type FlagOverridesFn = (context: Context) => FlagOverrides;type FlagRemoteConfig =
| {
key: string;
payload: any;
}
| EmptyFlagRemoteConfig;type FlagsAPIResponse = {
features: FlagAPIResponse[];
flagStateVersion: number;
};type FlagsFallbackProviderContext = {
secretKeyHash: string;
};type FlagsFallbackSnapshot = {
flags: FlagAPIResponse[];
savedAt: string;
version: number;
};type FlagsSyncMode = "polling" | "in-request" | "push";type FlagType = {
config: {
payload: any;
};
};type GCSFallbackProviderClient =
| GCSLegacyClient
| GCSGoogleApisClient;type GCSFallbackProviderOptions = {
bucket: string;
client: GCSFallbackProviderClient;
keyPrefix: string;
};type GCSGoogleApisClient = {
objects: {
get: Promise<{
data: unknown;
}>;
insert: Promise<unknown>;
};
};type GCSLegacyClient = {
bucket: {
file: {
download: Promise<[Uint8Array]>;
exists: Promise<[boolean]>;
save: Promise<unknown>;
};
};
};type HttpClientResponse<TResponse> = {
body: TResponse | undefined;
ok: boolean;
status: number;
};type IdType = string | number;type LogLevel = typeof LOG_LEVELS[number];type RawFlagRemoteConfig = {
evaluationErrors: EvaluationError[];
key: string;
missingContextFields: string[];
payload: any;
ruleEvaluationResults: boolean[];
targetingVersion: number;
};type RawFlags = Record<TypedFlagKey, RawFlag>;type RedisFallbackProviderOptions = {
client: {
get: Promise<undefined | null | string>;
set: Promise<unknown>;
};
keyPrefix: string;
};type S3FallbackProviderOptions = {
bucket: string;
client: {
send: Promise<any>;
};
keyPrefix: string;
};type StaticFallbackProviderOptions = {
flags: Record<string, boolean>;
};type TrackingMeta = {
active: boolean;
};type TrackOptions = {
attributes: Attributes;
meta: TrackingMeta;
};type TypedFlagKey = keyof TypedFlags;type TypedFlags = keyof Flags extends never ? Record<string, Flag> : { [FlagKey in keyof Flags]: Flags[FlagKey] extends FlagType ? Flag<Flags[FlagKey]["config"]> : Flag };const fallbackProviders: {
file: (__namedParameters: FileFallbackProviderOptions) => FlagsFallbackProvider;
gcs: (__namedParameters: GCSFallbackProviderOptions) => FlagsFallbackProvider;
redis: (__namedParameters: RedisFallbackProviderOptions) => FlagsFallbackProvider;
s3: (__namedParameters: S3FallbackProviderOptions) => FlagsFallbackProvider;
static: (__namedParameters: StaticFallbackProviderOptions) => FlagsFallbackProvider;
};const LOG_LEVELS: readonly ["DEBUG", "INFO", "WARN", "ERROR"];