import axios, { AxiosInstance } from 'axios'; import { AuthService } from './auth.js'; import { AppStoreConnectConfig } from '../types/index.js'; export class AppStoreConnectClient { private axiosInstance: AxiosInstance; private authService: AuthService; constructor(config: AppStoreConnectConfig) { this.authService = new AuthService(config); this.authService.validateConfig(); this.axiosInstance = axios.create({ baseURL: 'https://api.appstoreconnect.apple.com/v1', }); } async request(method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH', url: string, data?: any, params?: Record): Promise { const token = await this.authService.generateToken(); const response = await this.axiosInstance.request({ method, url, data, params, headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }); return response.data; } async get(url: string, params?: Record): Promise { return this.request('GET', url, undefined, params); } async post(url: string, data: any): Promise { return this.request('POST', url, data); } async put(url: string, data: any): Promise { return this.request('PUT', url, data); } async delete(url: string, data?: any): Promise { return this.request('DELETE', url, data); } async patch(url: string, data: any): Promise { return this.request('PATCH', url, data); } async downloadFromUrl(url: string): Promise { const token = await this.authService.generateToken(); const response = await axios.get(url, { headers: { 'Authorization': `Bearer ${token}` } }); return { data: response.data, contentType: response.headers['content-type'], size: response.headers['content-length'] }; } }