Update a zone ruleset rule

Updates an existing rule in a zone ruleset.

Script cloudflare Verified

by hugo697 ยท 11/16/2023

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 383 days ago
1
type Cloudflare = {
2
  token: string;
3
  email: string;
4
  key: string;
5
};
6
/**
7
 * Update a zone ruleset rule
8
 * Updates an existing rule in a zone ruleset.
9
 */
10
export async function main(
11
  auth: Cloudflare,
12
  rule_id: string,
13
  ruleset_id: string,
14
  zone_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/zones/${zone_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