fix: normalize provider aliases in auth order

This commit is contained in:
Peter Steinberger
2026-01-07 05:43:32 +01:00
parent 8187baab18
commit 12d57da53a
5 changed files with 493 additions and 39 deletions

View File

@@ -120,6 +120,37 @@ describe("resolveAuthProfileOrder", () => {
expect(order).toEqual(["zai:work", "zai:default"]);
});
it("normalizes provider casing in auth.order keys", () => {
const order = resolveAuthProfileOrder({
cfg: {
auth: {
order: { OpenAI: ["openai:work", "openai:default"] },
profiles: {
"openai:default": { provider: "openai", mode: "api_key" },
"openai:work": { provider: "openai", mode: "api_key" },
},
},
},
store: {
version: 1,
profiles: {
"openai:default": {
type: "api_key",
provider: "openai",
key: "sk-default",
},
"openai:work": {
type: "api_key",
provider: "openai",
key: "sk-work",
},
},
},
provider: "openai",
});
expect(order).toEqual(["openai:work", "openai:default"]);
});
it("normalizes z.ai aliases in auth.profiles", () => {
const order = resolveAuthProfileOrder({
cfg: {

View File

@@ -542,12 +542,14 @@ export function resolveAuthProfileOrder(params: {
}): string[] {
const { cfg, store, provider, preferredProfile } = params;
const providerKey = normalizeProviderId(provider);
const configuredOrder =
cfg?.auth?.order?.[providerKey] ??
cfg?.auth?.order?.[provider] ??
(providerKey === "zai"
? (cfg?.auth?.order?.["z.ai"] ?? cfg?.auth?.order?.["z-ai"])
: undefined);
const configuredOrder = (() => {
const order = cfg?.auth?.order;
if (!order) return undefined;
for (const [key, value] of Object.entries(order)) {
if (normalizeProviderId(key) === providerKey) return value;
}
return undefined;
})();
const explicitProfiles = cfg?.auth?.profiles
? Object.entries(cfg.auth.profiles)
.filter(
@@ -565,7 +567,7 @@ export function resolveAuthProfileOrder(params: {
const filtered = baseOrder.filter((profileId) => {
const cred = store.profiles[profileId];
return cred ? cred.provider === provider : true;
return cred ? normalizeProviderId(cred.provider) === providerKey : true;
});
const deduped: string[] = [];
for (const entry of filtered) {