import { OpenFlareBaseService } from './base.service'; import type { CloudflareAvailableDomain, CloudflareConnection, CloudflareConnectionPayload, CloudflareGroup, CloudflareGroupDetail, CloudflareGroupPayload, CloudflareMember, CloudflareMemberCreatePayload, CloudflareOverview, CloudflareSyncReceipt, } from './types'; export const cloudflareQueryKey = ['openflare', 'cloudflare'] as const; export class CloudflareService extends OpenFlareBaseService { protected static override readonly basePath = '/api/v1/d/cloudflare'; static getConnection(): Promise { return this.get('/connection'); } static saveConnection( payload: CloudflareConnectionPayload, ): Promise { return this.put('/connection', payload); } static verifyConnection(): Promise { return this.post('/connection/verify'); } static clearConnection(): Promise { return this.post('/connection/clear'); } static getOverview(): Promise { return this.get('/overview'); } static listGroups(): Promise { return this.get('/groups'); } static getGroup(id: number): Promise { return this.get(`/groups/${id}`); } static createGroup( payload: CloudflareGroupPayload, ): Promise { return this.post('/groups', payload); } static updateGroup( id: number, payload: CloudflareGroupPayload, ): Promise { return this.post(`/groups/${id}/update`, payload); } static deleteGroup(id: number): Promise { return this.post(`/groups/${id}/delete`); } static syncGroup(id: number): Promise { return this.post(`/groups/${id}/sync`); } static listAvailableDomains(): Promise { return this.get('/domains/available'); } static createMember( groupId: number, payload: CloudflareMemberCreatePayload, ): Promise { return this.post(`/groups/${groupId}/members`, payload); } static updateMember( groupId: number, memberId: number, proxied: boolean, ): Promise { return this.post( `/groups/${groupId}/members/${memberId}/update`, { proxied }, ); } static removeMember(groupId: number, memberId: number): Promise { return this.post(`/groups/${groupId}/members/${memberId}/remove`); } static syncMember( groupId: number, memberId: number, ): Promise { return this.post( `/groups/${groupId}/members/${memberId}/sync`, ); } static moveMember( groupId: number, memberId: number, targetGroupId: number, ): Promise { return this.post( `/groups/${groupId}/members/${memberId}/move`, { target_group_id: targetGroupId }, ); } static batchMoveMembers( groupId: number, memberIds: number[], targetGroupId: number, ): Promise { return this.post(`/groups/${groupId}/members/batch-move`, { member_ids: memberIds, target_group_id: targetGroupId, }); } static batchRemoveMembers( groupId: number, memberIds: number[], ): Promise { return this.post(`/groups/${groupId}/members/batch-remove`, { member_ids: memberIds, }); } }