Update an account entry point ruleset

Updates an account entry point ruleset, creating a new version.

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 an account entry point ruleset
8
 * Updates an account entry point ruleset, creating a new version.
9
 */
10
export async function main(
11
  auth: Cloudflare,
12
  ruleset_phase:
13
    | "ddos_l4"
14
    | "ddos_l7"
15
    | "http_config_settings"
16
    | "http_custom_errors"
17
    | "http_log_custom_fields"
18
    | "http_ratelimit"
19
    | "http_request_cache_settings"
20
    | "http_request_dynamic_redirect"
21
    | "http_request_firewall_custom"
22
    | "http_request_firewall_managed"
23
    | "http_request_late_transform"
24
    | "http_request_origin"
25
    | "http_request_redirect"
26
    | "http_request_sanitize"
27
    | "http_request_sbfm"
28
    | "http_request_select_configuration"
29
    | "http_request_transform"
30
    | "http_response_compression"
31
    | "http_response_firewall_managed"
32
    | "http_response_headers_transform"
33
    | "magic_transit"
34
    | "magic_transit_ids_managed"
35
    | "magic_transit_managed",
36
  account_id: string,
37
  body: {
38
    description?: string;
39
    id: string & { [k: string]: unknown };
40
    kind?: "managed" | "custom" | "root" | "zone";
41
    last_updated: string;
42
    name?: string;
43
    phase?:
44
      | "ddos_l4"
45
      | "ddos_l7"
46
      | "http_config_settings"
47
      | "http_custom_errors"
48
      | "http_log_custom_fields"
49
      | "http_ratelimit"
50
      | "http_request_cache_settings"
51
      | "http_request_dynamic_redirect"
52
      | "http_request_firewall_custom"
53
      | "http_request_firewall_managed"
54
      | "http_request_late_transform"
55
      | "http_request_origin"
56
      | "http_request_redirect"
57
      | "http_request_sanitize"
58
      | "http_request_sbfm"
59
      | "http_request_select_configuration"
60
      | "http_request_transform"
61
      | "http_response_compression"
62
      | "http_response_firewall_managed"
63
      | "http_response_headers_transform"
64
      | "magic_transit"
65
      | "magic_transit_ids_managed"
66
      | "magic_transit_managed";
67
    version: string;
68
    [k: string]: unknown;
69
  } & {
70
    rules: (
71
      | ({
72
          action?: string;
73
          action_parameters?: { [k: string]: unknown };
74
          categories?: string[];
75
          description?: string;
76
          enabled?: boolean & boolean;
77
          expression?: string;
78
          id?: string;
79
          last_updated: string;
80
          logging?: { enabled: boolean; [k: string]: unknown };
81
          ref?: string;
82
          version: string;
83
          [k: string]: unknown;
84
        } & {
85
          action?: "block";
86
          action_parameters?: {
87
            response?: {
88
              content: string;
89
              content_type: string;
90
              status_code: number;
91
              [k: string]: unknown;
92
            };
93
            [k: string]: unknown;
94
          };
95
          description?: { [k: string]: unknown };
96
          [k: string]: unknown;
97
        })
98
      | ({
99
          action?: string;
100
          action_parameters?: { [k: string]: unknown };
101
          categories?: string[];
102
          description?: string;
103
          enabled?: boolean & boolean;
104
          expression?: string;
105
          id?: string;
106
          last_updated: string;
107
          logging?: { enabled: boolean; [k: string]: unknown };
108
          ref?: string;
109
          version: string;
110
          [k: string]: unknown;
111
        } & {
112
          action?: "execute";
113
          action_parameters?: {
114
            id: string & { [k: string]: unknown };
115
            matched_data?: { public_key: string; [k: string]: unknown };
116
            overrides?: {
117
              action?: string & { [k: string]: unknown };
118
              categories?: {
119
                action?: string & { [k: string]: unknown };
120
                category: string & { [k: string]: unknown };
121
                enabled?: boolean & { [k: string]: unknown };
122
                sensitivity_level?:
123
                  | "default"
124
                  | "medium"
125
                  | "low"
126
                  | ("eoff" & { [k: string]: unknown });
127
                [k: string]: unknown;
128
              }[];
129
              enabled?: boolean & { [k: string]: unknown };
130
              rules?: {
131
                action?: string & { [k: string]: unknown };
132
                enabled?: boolean & { [k: string]: unknown };
133
                id: string & { [k: string]: unknown };
134
                score_threshold?: number;
135
                sensitivity_level?:
136
                  | "default"
137
                  | "medium"
138
                  | "low"
139
                  | ("eoff" & { [k: string]: unknown });
140
                [k: string]: unknown;
141
              }[];
142
              sensitivity_level?:
143
                | "default"
144
                | "medium"
145
                | "low"
146
                | ("eoff" & { [k: string]: unknown });
147
              [k: string]: unknown;
148
            };
149
            [k: string]: unknown;
150
          };
151
          description?: { [k: string]: unknown };
152
          [k: string]: unknown;
153
        })
154
      | ({
155
          action?: string;
156
          action_parameters?: { [k: string]: unknown };
157
          categories?: string[];
158
          description?: string;
159
          enabled?: boolean & boolean;
160
          expression?: string;
161
          id?: string;
162
          last_updated: string;
163
          logging?: { enabled: boolean; [k: string]: unknown };
164
          ref?: string;
165
          version: string;
166
          [k: string]: unknown;
167
        } & {
168
          action?: "log";
169
          action_parameters?: {};
170
          description?: { [k: string]: unknown };
171
          [k: string]: unknown;
172
        })
173
      | ({
174
          action?: string;
175
          action_parameters?: { [k: string]: unknown };
176
          categories?: string[];
177
          description?: string;
178
          enabled?: boolean & boolean;
179
          expression?: string;
180
          id?: string;
181
          last_updated: string;
182
          logging?: { enabled: boolean; [k: string]: unknown };
183
          ref?: string;
184
          version: string;
185
          [k: string]: unknown;
186
        } & {
187
          action?: "skip";
188
          action_parameters?: {
189
            phases?: (
190
              | "ddos_l4"
191
              | "ddos_l7"
192
              | "http_config_settings"
193
              | "http_custom_errors"
194
              | "http_log_custom_fields"
195
              | "http_ratelimit"
196
              | "http_request_cache_settings"
197
              | "http_request_dynamic_redirect"
198
              | "http_request_firewall_custom"
199
              | "http_request_firewall_managed"
200
              | "http_request_late_transform"
201
              | "http_request_origin"
202
              | "http_request_redirect"
203
              | "http_request_sanitize"
204
              | "http_request_sbfm"
205
              | "http_request_select_configuration"
206
              | "http_request_transform"
207
              | "http_response_compression"
208
              | "http_response_firewall_managed"
209
              | "http_response_headers_transform"
210
              | "magic_transit"
211
              | "magic_transit_ids_managed"
212
              | ("magic_transit_managed" & { [k: string]: unknown })
213
            )[];
214
            products?:
215
              | "bic"
216
              | "hot"
217
              | "rateLimit"
218
              | "securityLevel"
219
              | "uaBlock"
220
              | "waf"
221
              | "zoneLockdown"[];
222
            rules?: { [k: string]: (string & { [k: string]: unknown })[] };
223
            ruleset?: "current";
224
            rulesets?: (string & { [k: string]: unknown })[];
225
            [k: string]: unknown;
226
          };
227
          description?: { [k: string]: unknown };
228
          [k: string]: unknown;
229
        })
230
    )[];
231
    [k: string]: unknown;
232
  }
233
) {
234
  const url = new URL(
235
    `https://api.cloudflare.com/client/v4/accounts/${account_id}/rulesets/phases/${ruleset_phase}/entrypoint`
236
  );
237

238
  const response = await fetch(url, {
239
    method: "PUT",
240
    headers: {
241
      "X-AUTH-EMAIL": auth.email,
242
      "X-AUTH-KEY": auth.key,
243
      "Content-Type": "application/json",
244
      Authorization: "Bearer " + auth.token,
245
    },
246
    body: JSON.stringify(body),
247
  });
248
  if (!response.ok) {
249
    const text = await response.text();
250
    throw new Error(`${response.status} ${text}`);
251
  }
252
  return await response.json();
253
}
254