File size: 3,297 Bytes
8059bf0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/**
 * Admin Error Passthrough Rules API endpoints
 * Handles error passthrough rule management for administrators
 */

import { apiClient } from '../client'

/**
 * Error passthrough rule interface
 */
export interface ErrorPassthroughRule {
  id: number
  name: string
  enabled: boolean
  priority: number
  error_codes: number[]
  keywords: string[]
  match_mode: 'any' | 'all'
  platforms: string[]
  passthrough_code: boolean
  response_code: number | null
  passthrough_body: boolean
  custom_message: string | null
  skip_monitoring: boolean
  description: string | null
  created_at: string
  updated_at: string
}

/**
 * Create rule request
 */
export interface CreateRuleRequest {
  name: string
  enabled?: boolean
  priority?: number
  error_codes?: number[]
  keywords?: string[]
  match_mode?: 'any' | 'all'
  platforms?: string[]
  passthrough_code?: boolean
  response_code?: number | null
  passthrough_body?: boolean
  custom_message?: string | null
  skip_monitoring?: boolean
  description?: string | null
}

/**
 * Update rule request
 */
export interface UpdateRuleRequest {
  name?: string
  enabled?: boolean
  priority?: number
  error_codes?: number[]
  keywords?: string[]
  match_mode?: 'any' | 'all'
  platforms?: string[]
  passthrough_code?: boolean
  response_code?: number | null
  passthrough_body?: boolean
  custom_message?: string | null
  skip_monitoring?: boolean
  description?: string | null
}

/**
 * List all error passthrough rules
 * @returns List of all rules sorted by priority
 */
export async function list(): Promise<ErrorPassthroughRule[]> {
  const { data } = await apiClient.get<ErrorPassthroughRule[]>('/admin/error-passthrough-rules')
  return data
}

/**
 * Get rule by ID
 * @param id - Rule ID
 * @returns Rule details
 */
export async function getById(id: number): Promise<ErrorPassthroughRule> {
  const { data } = await apiClient.get<ErrorPassthroughRule>(`/admin/error-passthrough-rules/${id}`)
  return data
}

/**
 * Create new rule
 * @param ruleData - Rule data
 * @returns Created rule
 */
export async function create(ruleData: CreateRuleRequest): Promise<ErrorPassthroughRule> {
  const { data } = await apiClient.post<ErrorPassthroughRule>('/admin/error-passthrough-rules', ruleData)
  return data
}

/**
 * Update rule
 * @param id - Rule ID
 * @param updates - Fields to update
 * @returns Updated rule
 */
export async function update(id: number, updates: UpdateRuleRequest): Promise<ErrorPassthroughRule> {
  const { data } = await apiClient.put<ErrorPassthroughRule>(`/admin/error-passthrough-rules/${id}`, updates)
  return data
}

/**
 * Delete rule
 * @param id - Rule ID
 * @returns Success confirmation
 */
export async function deleteRule(id: number): Promise<{ message: string }> {
  const { data } = await apiClient.delete<{ message: string }>(`/admin/error-passthrough-rules/${id}`)
  return data
}

/**
 * Toggle rule enabled status
 * @param id - Rule ID
 * @param enabled - New enabled status
 * @returns Updated rule
 */
export async function toggleEnabled(id: number, enabled: boolean): Promise<ErrorPassthroughRule> {
  return update(id, { enabled })
}

export const errorPassthroughAPI = {
  list,
  getById,
  create,
  update,
  delete: deleteRule,
  toggleEnabled
}

export default errorPassthroughAPI