80 lines
2.0 KiB
TypeScript
80 lines
2.0 KiB
TypeScript
/**
|
|
* API Key Validation Logic
|
|
*
|
|
* Core validation functions for API key management
|
|
*/
|
|
|
|
import { API_BASE_URL, API_ENDPOINTS } from './constants';
|
|
import type { ApiKeyInfo, ApiInfoResponse, ValidationResult } from './types';
|
|
|
|
/**
|
|
* Parse API key info from API response
|
|
* Handles various response formats (organizationSlug vs organizationId)
|
|
*/
|
|
export function parseKeyInfo(data: ApiInfoResponse): ApiKeyInfo {
|
|
if (data.keyInfo) {
|
|
return {
|
|
organizationSlug: data.keyInfo.organizationSlug || data.keyInfo.organizationId || 'Unknown',
|
|
projectSlug: data.keyInfo.projectSlug || data.keyInfo.projectId || 'Unknown',
|
|
};
|
|
}
|
|
|
|
return {
|
|
organizationSlug: 'Unknown',
|
|
projectSlug: 'Unknown',
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Validate API key by making request to /api/info endpoint
|
|
*
|
|
* @param apiKey - The API key to validate
|
|
* @returns ValidationResult with success status, keyInfo, or error
|
|
*/
|
|
export async function validateApiKeyRequest(apiKey: string): Promise<ValidationResult> {
|
|
if (!apiKey.trim()) {
|
|
return {
|
|
success: false,
|
|
error: 'Please enter an API key',
|
|
};
|
|
}
|
|
|
|
try {
|
|
const response = await fetch(`${API_BASE_URL}${API_ENDPOINTS.INFO}`, {
|
|
headers: {
|
|
'X-API-Key': apiKey,
|
|
},
|
|
});
|
|
|
|
if (response.ok) {
|
|
const data: ApiInfoResponse = await response.json();
|
|
const keyInfo = parseKeyInfo(data);
|
|
|
|
return {
|
|
success: true,
|
|
keyInfo,
|
|
};
|
|
} else {
|
|
// Try to parse error message from response
|
|
try {
|
|
const error = await response.json();
|
|
return {
|
|
success: false,
|
|
error: error.message || 'Invalid API key',
|
|
};
|
|
} catch {
|
|
return {
|
|
success: false,
|
|
error: response.status === 401 ? 'Invalid API key' : `Request failed with status ${response.status}`,
|
|
};
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('API key validation error:', error);
|
|
return {
|
|
success: false,
|
|
error: 'Failed to validate API key. Please check your connection.',
|
|
};
|
|
}
|
|
}
|