1 | type Cloudflare = { |
2 | token: string; |
3 | email: string; |
4 | key: string; |
5 | }; |
6 | |
7 | * Update an account ruleset rule |
8 | * Updates an existing rule in an account ruleset. |
9 | */ |
10 | export async function main( |
11 | auth: Cloudflare, |
12 | rule_id: string, |
13 | ruleset_id: string, |
14 | account_id: string, |
15 | body: ( |
16 | | ({ |
17 | action?: string; |
18 | action_parameters?: { [k: string]: unknown }; |
19 | categories?: string[]; |
20 | description?: string; |
21 | enabled?: boolean; |
22 | expression?: string; |
23 | id?: string; |
24 | last_updated: string; |
25 | logging?: { enabled: boolean; [k: string]: unknown }; |
26 | ref?: string; |
27 | version: string; |
28 | [k: string]: unknown; |
29 | } & { |
30 | action?: "block"; |
31 | action_parameters?: { |
32 | response?: { |
33 | content: string; |
34 | content_type: string; |
35 | status_code: number; |
36 | [k: string]: unknown; |
37 | }; |
38 | [k: string]: unknown; |
39 | }; |
40 | description?: { [k: string]: unknown }; |
41 | [k: string]: unknown; |
42 | }) |
43 | | ({ |
44 | action?: string; |
45 | action_parameters?: { [k: string]: unknown }; |
46 | categories?: string[]; |
47 | description?: string; |
48 | enabled?: boolean; |
49 | expression?: string; |
50 | id?: string; |
51 | last_updated: string; |
52 | logging?: { enabled: boolean; [k: string]: unknown }; |
53 | ref?: string; |
54 | version: string; |
55 | [k: string]: unknown; |
56 | } & { |
57 | action?: "execute"; |
58 | action_parameters?: { |
59 | id: string & { [k: string]: unknown }; |
60 | matched_data?: { public_key: string; [k: string]: unknown }; |
61 | overrides?: { |
62 | action?: string & { [k: string]: unknown }; |
63 | categories?: { |
64 | action?: string & { [k: string]: unknown }; |
65 | category: string & { [k: string]: unknown }; |
66 | enabled?: boolean & { [k: string]: unknown }; |
67 | sensitivity_level?: |
68 | | "default" |
69 | | "medium" |
70 | | "low" |
71 | | ("eoff" & { [k: string]: unknown }); |
72 | [k: string]: unknown; |
73 | }[]; |
74 | enabled?: boolean & { [k: string]: unknown }; |
75 | rules?: { |
76 | action?: string & { [k: string]: unknown }; |
77 | enabled?: boolean & { [k: string]: unknown }; |
78 | id: string & { [k: string]: unknown }; |
79 | score_threshold?: number; |
80 | sensitivity_level?: |
81 | | "default" |
82 | | "medium" |
83 | | "low" |
84 | | ("eoff" & { [k: string]: unknown }); |
85 | [k: string]: unknown; |
86 | }[]; |
87 | sensitivity_level?: |
88 | | "default" |
89 | | "medium" |
90 | | "low" |
91 | | ("eoff" & { [k: string]: unknown }); |
92 | [k: string]: unknown; |
93 | }; |
94 | [k: string]: unknown; |
95 | }; |
96 | description?: { [k: string]: unknown }; |
97 | [k: string]: unknown; |
98 | }) |
99 | | ({ |
100 | action?: string; |
101 | action_parameters?: { [k: string]: unknown }; |
102 | categories?: string[]; |
103 | description?: string; |
104 | enabled?: boolean; |
105 | expression?: string; |
106 | id?: string; |
107 | last_updated: string; |
108 | logging?: { enabled: boolean; [k: string]: unknown }; |
109 | ref?: string; |
110 | version: string; |
111 | [k: string]: unknown; |
112 | } & { |
113 | action?: "log"; |
114 | action_parameters?: {}; |
115 | description?: { [k: string]: unknown }; |
116 | [k: string]: unknown; |
117 | }) |
118 | | ({ |
119 | action?: string; |
120 | action_parameters?: { [k: string]: unknown }; |
121 | categories?: string[]; |
122 | description?: string; |
123 | enabled?: boolean; |
124 | expression?: string; |
125 | id?: string; |
126 | last_updated: string; |
127 | logging?: { enabled: boolean; [k: string]: unknown }; |
128 | ref?: string; |
129 | version: string; |
130 | [k: string]: unknown; |
131 | } & { |
132 | action?: "skip"; |
133 | action_parameters?: { |
134 | phases?: ( |
135 | | "ddos_l4" |
136 | | "ddos_l7" |
137 | | "http_config_settings" |
138 | | "http_custom_errors" |
139 | | "http_log_custom_fields" |
140 | | "http_ratelimit" |
141 | | "http_request_cache_settings" |
142 | | "http_request_dynamic_redirect" |
143 | | "http_request_firewall_custom" |
144 | | "http_request_firewall_managed" |
145 | | "http_request_late_transform" |
146 | | "http_request_origin" |
147 | | "http_request_redirect" |
148 | | "http_request_sanitize" |
149 | | "http_request_sbfm" |
150 | | "http_request_select_configuration" |
151 | | "http_request_transform" |
152 | | "http_response_compression" |
153 | | "http_response_firewall_managed" |
154 | | "http_response_headers_transform" |
155 | | "magic_transit" |
156 | | "magic_transit_ids_managed" |
157 | | ("magic_transit_managed" & { [k: string]: unknown }) |
158 | )[]; |
159 | products?: |
160 | | "bic" |
161 | | "hot" |
162 | | "rateLimit" |
163 | | "securityLevel" |
164 | | "uaBlock" |
165 | | "waf" |
166 | | "zoneLockdown"[]; |
167 | rules?: { [k: string]: (string & { [k: string]: unknown })[] }; |
168 | ruleset?: "current"; |
169 | rulesets?: (string & { [k: string]: unknown })[]; |
170 | [k: string]: unknown; |
171 | }; |
172 | description?: { [k: string]: unknown }; |
173 | [k: string]: unknown; |
174 | }) |
175 | ) & { |
176 | position?: |
177 | | ({ [k: string]: unknown } & { before?: string; [k: string]: unknown }) |
178 | | ({ [k: string]: unknown } & { after?: string; [k: string]: unknown }) |
179 | | ({ [k: string]: unknown } & { index?: number; [k: string]: unknown }); |
180 | [k: string]: unknown; |
181 | } |
182 | ) { |
183 | const url = new URL( |
184 | `https://api.cloudflare.com/client/v4/accounts/${account_id}/rulesets/${ruleset_id}/rules/${rule_id}` |
185 | ); |
186 |
|
187 | const response = await fetch(url, { |
188 | method: "PATCH", |
189 | headers: { |
190 | "X-AUTH-EMAIL": auth.email, |
191 | "X-AUTH-KEY": auth.key, |
192 | "Content-Type": "application/json", |
193 | Authorization: "Bearer " + auth.token, |
194 | }, |
195 | body: JSON.stringify(body), |
196 | }); |
197 | if (!response.ok) { |
198 | const text = await response.text(); |
199 | throw new Error(`${response.status} ${text}`); |
200 | } |
201 | return await response.json(); |
202 | } |
203 |
|