import axios, { AxiosInstance } from 'axios';
import {
VolcengineImageGenerationRequest,
VolcengineImageGenerationResponse
} from './types';
export class VolcengineAPI {
private client: AxiosInstance;
private apiKey: string;
private baseUrl: string;
constructor(apiKey: string, baseUrl: string = 'https://ark.cn-beijing.volces.com/api/v3') {
this.apiKey = apiKey;
this.baseUrl = baseUrl;
this.client = axios.create({
baseURL: this.baseUrl,
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${this.apiKey}`,
},
});
}
async generateImage(request: VolcengineImageGenerationRequest): Promise<VolcengineImageGenerationResponse> {
try {
const response = await this.client.post<VolcengineImageGenerationResponse>(
'/images/generations',
request
);
return response.data;
} catch (error) {
if (axios.isAxiosError(error)) {
const status = error.response?.status;
const message = error.response?.data?.error?.message || error.message;
if (status === 401) {
throw new Error('Invalid API key or unauthorized access');
} else if (status === 429) {
throw new Error('Rate limit exceeded. Please try again later.');
} else if (status === 400) {
throw new Error(`Invalid request: ${message}`);
} else {
throw new Error(`API request failed: ${message}`);
}
}
throw new Error(`Unknown error: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
async validateApiKey(): Promise<boolean> {
try {
await this.client.get('/models');
return true;
} catch {
return false;
}
}
}