import { OpenFlareBaseService } from './base.service'; import type { WAFIPGroup, WAFIPGroupAutoTestPayload, WAFIPGroupAutoTestResult, WAFIPGroupPayload, WAFIPGroupSyncResult, WAFCreateRulePayload, WAFRule, WAFSaveRuleGraphPayload, WAFSiteRuleGroups, WAFUpdateRuleMetaPayload, } from './types'; export class WafService extends OpenFlareBaseService { protected static override readonly basePath: string = '/api/v1/d/waf'; static async listRuleGroups(): Promise { return this.get('/rule-groups'); } static async getRule(id: number): Promise { return this.get(`/rule-groups/${id}`); } static async createRule(payload: WAFCreateRulePayload): Promise { return this.post('/rule-groups', payload); } static async saveRuleGraph( id: number, payload: WAFSaveRuleGraphPayload, ): Promise { return this.post(`/rule-groups/${id}/graph`, payload); } static async updateRuleMeta( id: number, payload: WAFUpdateRuleMetaPayload, ): Promise { return this.post(`/rule-groups/${id}/meta`, payload); } static async deleteRuleGroup(id: number): Promise { return this.post(`/rule-groups/${id}/delete`); } static async listSiteRuleGroups(routeId: number): Promise { return this.get(`/sites/${routeId}/rule-groups`); } static async updateSiteRuleGroups( routeId: number, ids: number[], ): Promise { return this.post(`/sites/${routeId}/rule-groups`, { ids, }); } static async listIPGroups(): Promise { return this.get('/ip-groups'); } static async getIPGroup(id: number): Promise { return this.get(`/ip-groups/${id}`); } static async createIPGroup(payload: WAFIPGroupPayload): Promise { return this.post('/ip-groups', payload); } static async updateIPGroup( id: number, payload: WAFIPGroupPayload, ): Promise { return this.post(`/ip-groups/${id}/update`, payload); } static async deleteIPGroup(id: number): Promise { return this.post(`/ip-groups/${id}/delete`); } static async testIPGroup( payload: WAFIPGroupAutoTestPayload, ): Promise { return this.post('/ip-groups/test', payload); } static async syncIPGroup(id: number): Promise { return this.post(`/ip-groups/${id}/sync`); } }