Open History to see the last commit
1import type { EnvironmentId } from "@t3tools/contracts";
2import type { AtomCommandResult } from "@t3tools/client-runtime/state/runtime";
3import {
4 isAtomCommandInterrupted,
5 squashAtomCommandFailure,
6} from "@t3tools/client-runtime/state/runtime";
7
8type RefreshProvidersTarget = {
9 readonly environmentId: EnvironmentId;
10 readonly input: { readonly refreshModels: true };
11};
12
13export function createProviderCatalogRefreshRunner<Result>(
14 refreshProviders: (target: RefreshProvidersTarget) => Promise<Result>,
15) {
16 let pending: Promise<Result> | null = null;
17
18 return (environmentId: EnvironmentId): Promise<Result> => {
19 if (pending) return pending;
20 pending = refreshProviders({ environmentId, input: { refreshModels: true } }).finally(() => {
21 pending = null;
22 });
23 return pending;
24 };
25}
26
27export function providerCatalogRefreshError(
28 result: AtomCommandResult<unknown, unknown>,
29): string | null {
30 if (result._tag !== "Failure" || isAtomCommandInterrupted(result)) return null;
31 const error = squashAtomCommandFailure(result);
32 return error instanceof Error ? error.message : "Provider discovery failed.";
33}