Files
openclaw/src/plugin-sdk/account-resolution.ts

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];
}