mirror of
https://github.com/tiennm99/ccs.git
synced 2026-10-12 22:14:22 +00:00
fix(minimax): prevent double-resolve race condition and align placeholder
- Add resolved flag + safeResolve() wrapper to prevent timeout/response race - Align apiKeyPlaceholder to YOUR_MINIMAX_API_KEY_HERE across presets
This commit is contained in:
1 parent
a00cf3691e
commit
a59ad0e8c6
3 files changed
+14
-7
No files matched your search
@@ -105,7 +105,7 @@ export const PROVIDER_PRESETS: ProviderPreset[] = [
|
|||||||
baseUrl: 'https://api.minimax.io/anthropic',
|
baseUrl: 'https://api.minimax.io/anthropic',
|
||||||
defaultProfileName: 'mm',
|
defaultProfileName: 'mm',
|
||||||
defaultModel: 'MiniMax-M2.1',
|
defaultModel: 'MiniMax-M2.1',
|
||||||
apiKeyPlaceholder: 'YOUR_MINIMAX_API_KEY',
|
apiKeyPlaceholder: 'YOUR_MINIMAX_API_KEY_HERE',
|
||||||
apiKeyHint: 'Get your API key at platform.minimax.io',
|
apiKeyHint: 'Get your API key at platform.minimax.io',
|
||||||
category: 'alternative',
|
category: 'alternative',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -64,6 +64,13 @@ async function validateProviderKey(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
|
let resolved = false;
|
||||||
|
const safeResolve = (result: ValidationResult) => {
|
||||||
|
if (resolved) return;
|
||||||
|
resolved = true;
|
||||||
|
resolve(result);
|
||||||
|
};
|
||||||
|
|
||||||
const isHttps = url.protocol === 'https:';
|
const isHttps = url.protocol === 'https:';
|
||||||
const httpModule = isHttps ? https : http;
|
const httpModule = isHttps ? https : http;
|
||||||
const defaultPort = isHttps ? 443 : 80;
|
const defaultPort = isHttps ? 443 : 80;
|
||||||
@@ -83,9 +90,9 @@ async function validateProviderKey(
|
|||||||
clearTimeout(timeoutId);
|
clearTimeout(timeoutId);
|
||||||
|
|
||||||
if (res.statusCode === 200) {
|
if (res.statusCode === 200) {
|
||||||
resolve({ valid: true });
|
safeResolve({ valid: true });
|
||||||
} else if (res.statusCode === 401 || res.statusCode === 403) {
|
} else if (res.statusCode === 401 || res.statusCode === 403) {
|
||||||
resolve({
|
safeResolve({
|
||||||
valid: false,
|
valid: false,
|
||||||
error: `API key rejected by ${config.displayName}`,
|
error: `API key rejected by ${config.displayName}`,
|
||||||
suggestion:
|
suggestion:
|
||||||
@@ -100,7 +107,7 @@ async function validateProviderKey(
|
|||||||
`[CCS-Preflight] Unexpected status ${res.statusCode} from ${url.href} - fail-open`
|
`[CCS-Preflight] Unexpected status ${res.statusCode} from ${url.href} - fail-open`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
resolve({ valid: true });
|
safeResolve({ valid: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
res.resume();
|
res.resume();
|
||||||
@@ -108,12 +115,12 @@ async function validateProviderKey(
|
|||||||
|
|
||||||
req.on('error', () => {
|
req.on('error', () => {
|
||||||
clearTimeout(timeoutId);
|
clearTimeout(timeoutId);
|
||||||
resolve({ valid: true });
|
safeResolve({ valid: true });
|
||||||
});
|
});
|
||||||
|
|
||||||
const timeoutId = setTimeout(() => {
|
const timeoutId = setTimeout(() => {
|
||||||
req.destroy();
|
req.destroy();
|
||||||
resolve({ valid: true });
|
safeResolve({ valid: true });
|
||||||
}, timeoutMs);
|
}, timeoutMs);
|
||||||
|
|
||||||
req.end();
|
req.end();
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ export const PROVIDER_PRESETS: ProviderPreset[] = [
|
|||||||
badge: '1M context',
|
badge: '1M context',
|
||||||
defaultModel: 'MiniMax-M2.1',
|
defaultModel: 'MiniMax-M2.1',
|
||||||
requiresApiKey: true,
|
requiresApiKey: true,
|
||||||
apiKeyPlaceholder: 'YOUR_MINIMAX_API_KEY',
|
apiKeyPlaceholder: 'YOUR_MINIMAX_API_KEY_HERE',
|
||||||
apiKeyHint: 'Get your API key at platform.minimax.io',
|
apiKeyHint: 'Get your API key at platform.minimax.io',
|
||||||
category: 'alternative',
|
category: 'alternative',
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in new issue
Block a user