208 lines
7.8 KiB
TypeScript
208 lines
7.8 KiB
TypeScript
import { Injectable, inject } from '@angular/core';
|
|
import { HttpClient } from '@angular/common/http';
|
|
import { firstValueFrom } from 'rxjs';
|
|
import {
|
|
IApiResponse,
|
|
IService,
|
|
IServiceCreate,
|
|
IServiceUpdate,
|
|
ISystemStatus,
|
|
IDomain,
|
|
IDomainDetail,
|
|
IDnsRecord,
|
|
IRegistry,
|
|
IRegistryCreate,
|
|
IRegistryToken,
|
|
ICreateTokenRequest,
|
|
ITokenCreatedResponse,
|
|
ISetting,
|
|
ISettings,
|
|
IPlatformService,
|
|
IPlatformResource,
|
|
TPlatformServiceType,
|
|
INetworkTarget,
|
|
INetworkStats,
|
|
IContainerStats,
|
|
IMetric,
|
|
} from '../types/api.types';
|
|
|
|
@Injectable({ providedIn: 'root' })
|
|
export class ApiService {
|
|
private http = inject(HttpClient);
|
|
|
|
// System Status
|
|
async getStatus(): Promise<IApiResponse<ISystemStatus>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<ISystemStatus>>('/api/status'));
|
|
}
|
|
|
|
// Services
|
|
async getServices(): Promise<IApiResponse<IService[]>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IService[]>>('/api/services'));
|
|
}
|
|
|
|
async getService(name: string): Promise<IApiResponse<IService>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IService>>(`/api/services/${name}`));
|
|
}
|
|
|
|
async createService(data: IServiceCreate): Promise<IApiResponse<IService>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<IService>>('/api/services', data));
|
|
}
|
|
|
|
async updateService(name: string, data: IServiceUpdate): Promise<IApiResponse<IService>> {
|
|
return firstValueFrom(this.http.put<IApiResponse<IService>>(`/api/services/${name}`, data));
|
|
}
|
|
|
|
async deleteService(name: string): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.delete<IApiResponse<void>>(`/api/services/${name}`));
|
|
}
|
|
|
|
async startService(name: string): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<void>>(`/api/services/${name}/start`, {}));
|
|
}
|
|
|
|
async stopService(name: string): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<void>>(`/api/services/${name}/stop`, {}));
|
|
}
|
|
|
|
async restartService(name: string): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<void>>(`/api/services/${name}/restart`, {}));
|
|
}
|
|
|
|
async getServiceLogs(name: string): Promise<IApiResponse<string>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<string>>(`/api/services/${name}/logs`));
|
|
}
|
|
|
|
async getServiceStats(name: string): Promise<IApiResponse<IContainerStats>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IContainerStats>>(`/api/services/${name}/stats`));
|
|
}
|
|
|
|
async getServiceMetrics(name: string, limit?: number): Promise<IApiResponse<IMetric[]>> {
|
|
const params = limit ? `?limit=${limit}` : '';
|
|
return firstValueFrom(this.http.get<IApiResponse<IMetric[]>>(`/api/services/${name}/metrics${params}`));
|
|
}
|
|
|
|
// Registries
|
|
async getRegistries(): Promise<IApiResponse<IRegistry[]>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IRegistry[]>>('/api/registries'));
|
|
}
|
|
|
|
async createRegistry(data: IRegistryCreate): Promise<IApiResponse<IRegistry>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<IRegistry>>('/api/registries', data));
|
|
}
|
|
|
|
async deleteRegistry(id: number): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.delete<IApiResponse<void>>(`/api/registries/${id}`));
|
|
}
|
|
|
|
// Registry Tokens
|
|
async getRegistryTokens(): Promise<IApiResponse<IRegistryToken[]>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IRegistryToken[]>>('/api/registry/tokens'));
|
|
}
|
|
|
|
async createRegistryToken(data: ICreateTokenRequest): Promise<IApiResponse<ITokenCreatedResponse>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<ITokenCreatedResponse>>('/api/registry/tokens', data));
|
|
}
|
|
|
|
async deleteRegistryToken(id: number): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.delete<IApiResponse<void>>(`/api/registry/tokens/${id}`));
|
|
}
|
|
|
|
// DNS Records
|
|
async getDnsRecords(): Promise<IApiResponse<IDnsRecord[]>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IDnsRecord[]>>('/api/dns'));
|
|
}
|
|
|
|
async createDnsRecord(domain: string, ip?: string): Promise<IApiResponse<IDnsRecord>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<IDnsRecord>>('/api/dns', { domain, ip }));
|
|
}
|
|
|
|
async deleteDnsRecord(domain: string): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.delete<IApiResponse<void>>(`/api/dns/${domain}`));
|
|
}
|
|
|
|
async syncDnsRecords(): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<void>>('/api/dns/sync', {}));
|
|
}
|
|
|
|
// Domains
|
|
async getDomains(): Promise<IApiResponse<IDomainDetail[]>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IDomainDetail[]>>('/api/domains'));
|
|
}
|
|
|
|
async getDomainDetail(domain: string): Promise<IApiResponse<IDomainDetail>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IDomainDetail>>(`/api/domains/${domain}`));
|
|
}
|
|
|
|
async syncCloudflareDomains(): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<void>>('/api/domains/sync', {}));
|
|
}
|
|
|
|
// SSL Certificates
|
|
async obtainCertificate(domain: string, includeWildcard?: boolean): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(
|
|
this.http.post<IApiResponse<void>>('/api/ssl/obtain', { domain, includeWildcard })
|
|
);
|
|
}
|
|
|
|
async renewCertificate(domain: string): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<void>>(`/api/ssl/${domain}/renew`, {}));
|
|
}
|
|
|
|
// Settings
|
|
async getSettings(): Promise<IApiResponse<ISetting[]>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<ISetting[]>>('/api/settings'));
|
|
}
|
|
|
|
async updateSettings(settings: Record<string, string> | ISettings): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.put<IApiResponse<void>>('/api/settings', settings));
|
|
}
|
|
|
|
async updateSetting(key: string, value: string): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.put<IApiResponse<void>>('/api/settings', { key, value }));
|
|
}
|
|
|
|
// Auth
|
|
async changePassword(currentPassword: string, newPassword: string): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(
|
|
this.http.post<IApiResponse<void>>('/api/auth/change-password', {
|
|
currentPassword,
|
|
newPassword,
|
|
})
|
|
);
|
|
}
|
|
|
|
// Platform Services
|
|
async getPlatformServices(): Promise<IApiResponse<IPlatformService[]>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IPlatformService[]>>('/api/platform-services'));
|
|
}
|
|
|
|
async getPlatformService(type: TPlatformServiceType): Promise<IApiResponse<IPlatformService>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IPlatformService>>(`/api/platform-services/${type}`));
|
|
}
|
|
|
|
async startPlatformService(type: TPlatformServiceType): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<void>>(`/api/platform-services/${type}/start`, {}));
|
|
}
|
|
|
|
async stopPlatformService(type: TPlatformServiceType): Promise<IApiResponse<void>> {
|
|
return firstValueFrom(this.http.post<IApiResponse<void>>(`/api/platform-services/${type}/stop`, {}));
|
|
}
|
|
|
|
async getPlatformServiceStats(type: TPlatformServiceType): Promise<IApiResponse<IContainerStats>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IContainerStats>>(`/api/platform-services/${type}/stats`));
|
|
}
|
|
|
|
async getServicePlatformResources(serviceName: string): Promise<IApiResponse<IPlatformResource[]>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<IPlatformResource[]>>(`/api/services/${serviceName}/platform-resources`));
|
|
}
|
|
|
|
// Network
|
|
async getNetworkTargets(): Promise<IApiResponse<INetworkTarget[]>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<INetworkTarget[]>>('/api/network/targets'));
|
|
}
|
|
|
|
async getNetworkStats(): Promise<IApiResponse<INetworkStats>> {
|
|
return firstValueFrom(this.http.get<IApiResponse<INetworkStats>>('/api/network/stats'));
|
|
}
|
|
}
|