mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-14 19:40:40 +00:00
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
export function resolveAccountWithDefaultFallback<TAccount>(params: {
|
|
accountId?: string | null;
|
|
normalizeAccountId: (accountId?: string | null) => string;
|
|
resolvePrimary: (accountId: string) => TAccount;
|
|
hasCredential: (account: TAccount) => boolean;
|
|
resolveDefaultAccountId: () => string;
|
|
}): TAccount {
|
|
const hasExplicitAccountId = Boolean(params.accountId?.trim());
|
|
const normalizedAccountId = params.normalizeAccountId(params.accountId);
|
|
const primary = params.resolvePrimary(normalizedAccountId);
|
|
if (hasExplicitAccountId || params.hasCredential(primary)) {
|
|
return primary;
|
|
}
|
|
|
|
const fallbackId = params.resolveDefaultAccountId();
|
|
if (fallbackId === normalizedAccountId) {
|
|
return primary;
|
|
}
|
|
const fallback = params.resolvePrimary(fallbackId);
|
|
if (!params.hasCredential(fallback)) {
|
|
return primary;
|
|
}
|
|
return fallback;
|
|
}
|
|
|
|
export function listConfiguredAccountIds(params: {
|
|
accounts: Record<string, unknown> | undefined;
|
|
normalizeAccountId: (accountId: string) => string;
|
|
}): string[] {
|
|
if (!params.accounts) {
|
|
return [];
|
|
}
|
|
const ids = new Set<string>();
|
|
for (const key of Object.keys(params.accounts)) {
|
|
if (!key) {
|
|
continue;
|
|
}
|
|
ids.add(params.normalizeAccountId(key));
|
|
}
|
|
return [...ids];
|
|
}
|