mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-19 05:32:19 +03:00
* fix(dashboard): remap Kimi Code API-key save to admitted managed id (#10096) The unified Kimi Code card's API-key branch posted provider: "kimi-coding" to POST /api/providers. "kimi-coding" is an OAuth-primary managed id, not an admitted API-key/dual-auth connection id, so the backend correctly rejected it with 400 "Invalid provider" even though key validation passed. Add resolveApiKeySaveProviderId() in useApiKeySave.ts to remap the posted provider id to the dedicated, admitted managed API-key id "kimi-coding-apikey" for the API-key save flow only. The OAuth flow (handleOAuthSuccess in ProviderDetailPageClient.tsx) never calls this hook and keeps posting "kimi-coding" unchanged. Regression test: tests/unit/bug-10096-kimi-coding-apikey-save.test.ts * fix(dashboard): remap Kimi Code bulk API-key save Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> --------- Co-authored-by: adevwithpurpose <adevwithpurpose@users.noreply.github.com>
38 lines
1.7 KiB
TypeScript
38 lines
1.7 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
// Issue #10096: Kimi Code API key validates OK but Save returns 400 "Invalid provider".
|
|
//
|
|
// Root cause: the unified Kimi Code dashboard card's API-key branch posted
|
|
// provider: "kimi-coding" (an OAuth-primary managed id, NOT an admitted
|
|
// API-key connection id) to POST /api/providers, which the backend rejects.
|
|
// The dedicated managed API-key id "kimi-coding-apikey" IS admitted.
|
|
//
|
|
// Fix: resolveApiKeySaveProviderId() in useApiKeySave.ts remaps the posted
|
|
// provider id to "kimi-coding-apikey" for the API-key save flow only, while
|
|
// the OAuth flow (which never calls this hook) keeps posting "kimi-coding".
|
|
|
|
const { isManagedProviderConnectionId } = await import("../../src/lib/providers/catalog.ts");
|
|
const { resolveApiKeySaveProviderId } = await import(
|
|
"../../src/app/(dashboard)/dashboard/providers/[id]/hooks/useApiKeySave.ts"
|
|
);
|
|
|
|
test("Kimi Code API-key save flow remaps to the admitted managed API-key id", () => {
|
|
assert.equal(
|
|
resolveApiKeySaveProviderId("kimi-coding"),
|
|
"kimi-coding-apikey",
|
|
"the unified Kimi Code card's API-key save flow must post kimi-coding-apikey, not kimi-coding"
|
|
);
|
|
assert.equal(
|
|
isManagedProviderConnectionId(resolveApiKeySaveProviderId("kimi-coding")),
|
|
true,
|
|
"the remapped id must be an admitted managed provider connection id (POST /api/providers accepts it)"
|
|
);
|
|
});
|
|
|
|
test("resolveApiKeySaveProviderId leaves every other provider id untouched", () => {
|
|
assert.equal(resolveApiKeySaveProviderId("openai"), "openai");
|
|
assert.equal(resolveApiKeySaveProviderId("kimi-coding-apikey"), "kimi-coding-apikey");
|
|
assert.equal(resolveApiKeySaveProviderId("qoder"), "qoder");
|
|
});
|