import type { CfDnsRecord, CfHealthCheck, CfZone, CreateDnsRecordPayload, PatchDnsRecordPayload, } from "@cfdm/shared"; import { createDnsAdapter } from "./cloudflare/dns-service.js"; import { createHealthCheckAdapter, type CfHealthCheckPayload } from "./cloudflare/healthcheck-service.js"; import { createZoneAdapter } from "./cloudflare/zone-service.js"; export type { CfHealthCheckPayload }; export class CloudflareClient { private readonly zones; private readonly dns; private readonly healthchecks; constructor(token: string) { this.zones = createZoneAdapter(token); this.dns = createDnsAdapter(token); this.healthchecks = createHealthCheckAdapter(token); } listZones(): Promise { return this.zones.listZones(); } getZone(zoneId: string): Promise { return this.zones.getZone(zoneId); } listDnsRecords(zoneId: string): Promise { return this.dns.listDnsRecords(zoneId); } createDnsRecord(zoneId: string, payload: CreateDnsRecordPayload): Promise { return this.dns.createDnsRecord(zoneId, payload); } updateDnsRecord( zoneId: string, recordId: string, payload: CreateDnsRecordPayload, ): Promise { return this.dns.updateDnsRecord(zoneId, recordId, payload); } patchDnsRecord( zoneId: string, recordId: string, payload: PatchDnsRecordPayload, ): Promise { return this.dns.patchDnsRecord(zoneId, recordId, payload); } deleteDnsRecord(zoneId: string, recordId: string): Promise { return this.dns.deleteDnsRecord(zoneId, recordId); } listHealthChecks(zoneId: string): Promise { return this.healthchecks.listHealthChecks(zoneId); } getHealthCheck(zoneId: string, id: string): Promise { return this.healthchecks.getHealthCheck(zoneId, id); } createHealthCheck(zoneId: string, payload: CfHealthCheckPayload): Promise { return this.healthchecks.createHealthCheck(zoneId, payload); } updateHealthCheck( zoneId: string, id: string, payload: CfHealthCheckPayload, ): Promise { return this.healthchecks.updateHealthCheck(zoneId, id, payload); } deleteHealthCheck(zoneId: string, id: string): Promise { return this.healthchecks.deleteHealthCheck(zoneId, id); } }