1 | type Cloudflare = { |
2 | token: string; |
3 | email: string; |
4 | key: string; |
5 | }; |
6 | |
7 | * Edit zone settings info |
8 | * Edit settings for a zone. |
9 | */ |
10 | export async function main( |
11 | auth: Cloudflare, |
12 | zone_identifier: string, |
13 | body: { |
14 | items: ( |
15 | | ({ |
16 | editable?: true | false; |
17 | id: string; |
18 | modified_on?: string; |
19 | value: { [k: string]: unknown }; |
20 | [k: string]: unknown; |
21 | } & { id?: "0rtt"; value?: "on" | "off"; [k: string]: unknown }) |
22 | | ({ |
23 | editable?: true | false; |
24 | id: string; |
25 | modified_on?: string; |
26 | value: { [k: string]: unknown }; |
27 | [k: string]: unknown; |
28 | } & { |
29 | id?: "advanced_ddos"; |
30 | value?: "on" | "off"; |
31 | [k: string]: unknown; |
32 | }) |
33 | | ({ |
34 | editable?: true | false; |
35 | id: string; |
36 | modified_on?: string; |
37 | value: { [k: string]: unknown }; |
38 | [k: string]: unknown; |
39 | } & { |
40 | id?: "always_online"; |
41 | value?: "on" | "off"; |
42 | [k: string]: unknown; |
43 | }) |
44 | | ({ |
45 | editable?: true | false; |
46 | id: string; |
47 | modified_on?: string; |
48 | value: { [k: string]: unknown }; |
49 | [k: string]: unknown; |
50 | } & { |
51 | id?: "always_use_https"; |
52 | value?: "on" | "off"; |
53 | [k: string]: unknown; |
54 | } & string) |
55 | | ({ |
56 | editable?: true | false; |
57 | id: string; |
58 | modified_on?: string; |
59 | value: { [k: string]: unknown }; |
60 | [k: string]: unknown; |
61 | } & { |
62 | id?: "automatic_https_rewrites"; |
63 | value?: "on" | "off"; |
64 | [k: string]: unknown; |
65 | } & string) |
66 | | ({ |
67 | editable?: true | false; |
68 | id: string; |
69 | modified_on?: string; |
70 | value: { [k: string]: unknown }; |
71 | [k: string]: unknown; |
72 | } & { id?: "brotli"; value?: "off" | "on"; [k: string]: unknown }) |
73 | | ({ |
74 | editable?: true | false; |
75 | id: string; |
76 | modified_on?: string; |
77 | value: { [k: string]: unknown }; |
78 | [k: string]: unknown; |
79 | } & { |
80 | id?: "browser_cache_ttl"; |
81 | value?: |
82 | | 0 |
83 | | 30 |
84 | | 60 |
85 | | 120 |
86 | | 300 |
87 | | 1200 |
88 | | 1800 |
89 | | 3600 |
90 | | 7200 |
91 | | 10800 |
92 | | 14400 |
93 | | 18000 |
94 | | 28800 |
95 | | 43200 |
96 | | 57600 |
97 | | 72000 |
98 | | 86400 |
99 | | 172800 |
100 | | 259200 |
101 | | 345600 |
102 | | 432000 |
103 | | 691200 |
104 | | 1382400 |
105 | | 2073600 |
106 | | 2678400 |
107 | | 5356800 |
108 | | 16070400 |
109 | | 31536000; |
110 | [k: string]: unknown; |
111 | }) |
112 | | ({ |
113 | editable?: true | false; |
114 | id: string; |
115 | modified_on?: string; |
116 | value: { [k: string]: unknown }; |
117 | [k: string]: unknown; |
118 | } & { |
119 | id?: "browser_check"; |
120 | value?: "on" | "off"; |
121 | [k: string]: unknown; |
122 | }) |
123 | | ({ |
124 | editable?: true | false; |
125 | id: string; |
126 | modified_on?: string; |
127 | value: { [k: string]: unknown }; |
128 | [k: string]: unknown; |
129 | } & { |
130 | id?: "cache_level"; |
131 | value?: "aggressive" | "basic" | "simplified"; |
132 | [k: string]: unknown; |
133 | }) |
134 | | ({ |
135 | editable?: true | false; |
136 | id: string; |
137 | modified_on?: string; |
138 | value: { [k: string]: unknown }; |
139 | [k: string]: unknown; |
140 | } & { |
141 | id?: "challenge_ttl"; |
142 | value?: |
143 | | 300 |
144 | | 900 |
145 | | 1800 |
146 | | 2700 |
147 | | 3600 |
148 | | 7200 |
149 | | 10800 |
150 | | 14400 |
151 | | 28800 |
152 | | 57600 |
153 | | 86400 |
154 | | 604800 |
155 | | 2592000 |
156 | | 31536000; |
157 | [k: string]: unknown; |
158 | }) |
159 | | ({ |
160 | editable?: true | false; |
161 | id: string; |
162 | modified_on?: string; |
163 | value: { [k: string]: unknown }; |
164 | [k: string]: unknown; |
165 | } & { id?: "ciphers"; value?: string[]; [k: string]: unknown }) |
166 | | ({ |
167 | editable?: true | false; |
168 | id: string; |
169 | modified_on?: string; |
170 | value: { [k: string]: unknown }; |
171 | [k: string]: unknown; |
172 | } & { |
173 | id?: "cname_flattening"; |
174 | value?: "flatten_at_root" | "flatten_all"; |
175 | [k: string]: unknown; |
176 | }) |
177 | | ({ |
178 | editable?: true | false; |
179 | id: string; |
180 | modified_on?: string; |
181 | value: { [k: string]: unknown }; |
182 | [k: string]: unknown; |
183 | } & { |
184 | id?: "development_mode"; |
185 | time_remaining?: number; |
186 | value?: "on" | "off"; |
187 | [k: string]: unknown; |
188 | }) |
189 | | ({ |
190 | editable?: true | false; |
191 | id: string; |
192 | modified_on?: string; |
193 | value: { [k: string]: unknown }; |
194 | [k: string]: unknown; |
195 | } & { id?: "early_hints"; value?: "on" | "off"; [k: string]: unknown }) |
196 | | ({ |
197 | editable?: true | false; |
198 | id: string; |
199 | modified_on?: string; |
200 | value: { [k: string]: unknown }; |
201 | [k: string]: unknown; |
202 | } & { |
203 | id?: "edge_cache_ttl"; |
204 | value?: |
205 | | 30 |
206 | | 60 |
207 | | 300 |
208 | | 1200 |
209 | | 1800 |
210 | | 3600 |
211 | | 7200 |
212 | | 10800 |
213 | | 14400 |
214 | | 18000 |
215 | | 28800 |
216 | | 43200 |
217 | | 57600 |
218 | | 72000 |
219 | | 86400 |
220 | | 172800 |
221 | | 259200 |
222 | | 345600 |
223 | | 432000 |
224 | | 518400 |
225 | | 604800; |
226 | [k: string]: unknown; |
227 | }) |
228 | | ({ |
229 | editable?: true | false; |
230 | id: string; |
231 | modified_on?: string; |
232 | value: { [k: string]: unknown }; |
233 | [k: string]: unknown; |
234 | } & { |
235 | id?: "email_obfuscation"; |
236 | value?: "on" | "off"; |
237 | [k: string]: unknown; |
238 | }) |
239 | | ({ |
240 | editable?: true | false; |
241 | id: string; |
242 | modified_on?: string; |
243 | value: { [k: string]: unknown }; |
244 | [k: string]: unknown; |
245 | } & { |
246 | id?: "h2_prioritization"; |
247 | value?: "on" | "off" | "custom"; |
248 | [k: string]: unknown; |
249 | }) |
250 | | ({ |
251 | editable?: true | false; |
252 | id: string; |
253 | modified_on?: string; |
254 | value: { [k: string]: unknown }; |
255 | [k: string]: unknown; |
256 | } & { |
257 | id?: "hotlink_protection"; |
258 | value?: "on" | "off"; |
259 | [k: string]: unknown; |
260 | }) |
261 | | ({ |
262 | editable?: true | false; |
263 | id: string; |
264 | modified_on?: string; |
265 | value: { [k: string]: unknown }; |
266 | [k: string]: unknown; |
267 | } & { id?: "http2"; value?: "on" | "off"; [k: string]: unknown }) |
268 | | ({ |
269 | editable?: true | false; |
270 | id: string; |
271 | modified_on?: string; |
272 | value: { [k: string]: unknown }; |
273 | [k: string]: unknown; |
274 | } & { id?: "http3"; value?: "on" | "off"; [k: string]: unknown }) |
275 | | ({ |
276 | editable?: true | false; |
277 | id: string; |
278 | modified_on?: string; |
279 | value: { [k: string]: unknown }; |
280 | [k: string]: unknown; |
281 | } & { |
282 | id?: "image_resizing"; |
283 | value?: "on" | "off" | "open"; |
284 | [k: string]: unknown; |
285 | }) |
286 | | ({ |
287 | editable?: true | false; |
288 | id: string; |
289 | modified_on?: string; |
290 | value: { [k: string]: unknown }; |
291 | [k: string]: unknown; |
292 | } & { |
293 | id?: "ip_geolocation"; |
294 | value?: "on" | "off"; |
295 | [k: string]: unknown; |
296 | }) |
297 | | ({ |
298 | editable?: true | false; |
299 | id: string; |
300 | modified_on?: string; |
301 | value: { [k: string]: unknown }; |
302 | [k: string]: unknown; |
303 | } & { id?: "ipv6"; value?: "off" | "on"; [k: string]: unknown }) |
304 | | ({ |
305 | editable?: true | false; |
306 | id: string; |
307 | modified_on?: string; |
308 | value: { [k: string]: unknown }; |
309 | [k: string]: unknown; |
310 | } & { |
311 | id?: "max_upload"; |
312 | value?: 100 | 200 | 500; |
313 | [k: string]: unknown; |
314 | }) |
315 | | ({ |
316 | editable?: true | false; |
317 | id: string; |
318 | modified_on?: string; |
319 | value: { [k: string]: unknown }; |
320 | [k: string]: unknown; |
321 | } & { |
322 | id?: "min_tls_version"; |
323 | value?: "1.0" | "1.1" | "1.2" | "1.3"; |
324 | [k: string]: unknown; |
325 | } & string) |
326 | | ({ |
327 | editable?: true | false; |
328 | id: string; |
329 | modified_on?: string; |
330 | value: { [k: string]: unknown }; |
331 | [k: string]: unknown; |
332 | } & { |
333 | id?: "minify"; |
334 | value?: { |
335 | css?: "on" | "off"; |
336 | html?: "on" | "off"; |
337 | js?: "on" | "off"; |
338 | [k: string]: unknown; |
339 | }; |
340 | [k: string]: unknown; |
341 | }) |
342 | | ({ |
343 | editable?: true | false; |
344 | id: string; |
345 | modified_on?: string; |
346 | value: { [k: string]: unknown }; |
347 | [k: string]: unknown; |
348 | } & { id?: "mirage"; value?: "on" | "off"; [k: string]: unknown }) |
349 | | ({ |
350 | editable?: true | false; |
351 | id: string; |
352 | modified_on?: string; |
353 | value: { [k: string]: unknown }; |
354 | [k: string]: unknown; |
355 | } & { |
356 | id?: "mobile_redirect"; |
357 | value?: { |
358 | mobile_subdomain?: string; |
359 | status?: "on" | "off"; |
360 | strip_uri?: boolean; |
361 | [k: string]: unknown; |
362 | }; |
363 | [k: string]: unknown; |
364 | }) |
365 | | ({ |
366 | editable?: true | false; |
367 | id: string; |
368 | modified_on?: string; |
369 | value: { [k: string]: unknown }; |
370 | [k: string]: unknown; |
371 | } & { |
372 | id?: "nel"; |
373 | value?: { enabled?: boolean; [k: string]: unknown }; |
374 | [k: string]: unknown; |
375 | }) |
376 | | ({ |
377 | editable?: true | false; |
378 | id: string; |
379 | modified_on?: string; |
380 | value: { [k: string]: unknown }; |
381 | [k: string]: unknown; |
382 | } & { |
383 | id?: "opportunistic_encryption"; |
384 | value?: "on" | "off"; |
385 | [k: string]: unknown; |
386 | }) |
387 | | ({ |
388 | editable?: true | false; |
389 | id: string; |
390 | modified_on?: string; |
391 | value: { [k: string]: unknown }; |
392 | [k: string]: unknown; |
393 | } & { |
394 | id?: "opportunistic_onion"; |
395 | value?: "on" | "off"; |
396 | [k: string]: unknown; |
397 | } & string) |
398 | | ({ |
399 | editable?: true | false; |
400 | id: string; |
401 | modified_on?: string; |
402 | value: { [k: string]: unknown }; |
403 | [k: string]: unknown; |
404 | } & { |
405 | id?: "orange_to_orange"; |
406 | value?: "on" | "off"; |
407 | [k: string]: unknown; |
408 | }) |
409 | | ({ |
410 | editable?: true | false; |
411 | id: string; |
412 | modified_on?: string; |
413 | value: { [k: string]: unknown }; |
414 | [k: string]: unknown; |
415 | } & { |
416 | id?: "origin_error_page_pass_thru"; |
417 | value?: "on" | "off"; |
418 | [k: string]: unknown; |
419 | } & string) |
420 | | { |
421 | id: "origin_max_http_version"; |
422 | modified_on?: string; |
423 | [k: string]: unknown; |
424 | } |
425 | | ({ |
426 | editable?: true | false; |
427 | id: string; |
428 | modified_on?: string; |
429 | value: { [k: string]: unknown }; |
430 | [k: string]: unknown; |
431 | } & { |
432 | id?: "polish"; |
433 | value?: "off" | "lossless" | "lossy"; |
434 | [k: string]: unknown; |
435 | }) |
436 | | ({ |
437 | editable?: true | false; |
438 | id: string; |
439 | modified_on?: string; |
440 | value: { [k: string]: unknown }; |
441 | [k: string]: unknown; |
442 | } & { |
443 | id?: "prefetch_preload"; |
444 | value?: "on" | "off"; |
445 | [k: string]: unknown; |
446 | } & string) |
447 | | ({ |
448 | editable?: true | false; |
449 | id: string; |
450 | modified_on?: string; |
451 | value: { [k: string]: unknown }; |
452 | [k: string]: unknown; |
453 | } & { id?: "proxy_read_timeout"; value?: number; [k: string]: unknown }) |
454 | | ({ |
455 | editable?: true | false; |
456 | id: string; |
457 | modified_on?: string; |
458 | value: { [k: string]: unknown }; |
459 | [k: string]: unknown; |
460 | } & { |
461 | id?: "pseudo_ipv4"; |
462 | value?: "off" | "add_header" | "overwrite_header"; |
463 | [k: string]: unknown; |
464 | }) |
465 | | ({ |
466 | editable?: true | false; |
467 | id: string; |
468 | modified_on?: string; |
469 | value: { [k: string]: unknown }; |
470 | [k: string]: unknown; |
471 | } & { |
472 | id?: "response_buffering"; |
473 | value?: "on" | "off"; |
474 | [k: string]: unknown; |
475 | } & string) |
476 | | ({ |
477 | editable?: true | false; |
478 | id: string; |
479 | modified_on?: string; |
480 | value: { [k: string]: unknown }; |
481 | [k: string]: unknown; |
482 | } & { |
483 | id?: "rocket_loader"; |
484 | value?: "on" | "off"; |
485 | [k: string]: unknown; |
486 | }) |
487 | | ({ |
488 | editable?: true | false; |
489 | id: string; |
490 | modified_on?: string; |
491 | value: { [k: string]: unknown }; |
492 | [k: string]: unknown; |
493 | } & { |
494 | id?: "automatic_platform_optimization"; |
495 | value?: { |
496 | cache_by_device_type: boolean; |
497 | cf: boolean; |
498 | enabled: boolean; |
499 | hostnames: string[]; |
500 | wordpress: boolean; |
501 | wp_plugin: boolean; |
502 | [k: string]: unknown; |
503 | }; |
504 | [k: string]: unknown; |
505 | }) |
506 | | ({ |
507 | editable?: true | false; |
508 | id: string; |
509 | modified_on?: string; |
510 | value: { [k: string]: unknown }; |
511 | [k: string]: unknown; |
512 | } & { |
513 | id?: "security_header"; |
514 | value?: { |
515 | strict_transport_security?: { |
516 | enabled?: boolean; |
517 | include_subdomains?: boolean; |
518 | max_age?: number; |
519 | nosniff?: boolean; |
520 | [k: string]: unknown; |
521 | }; |
522 | [k: string]: unknown; |
523 | }; |
524 | [k: string]: unknown; |
525 | }) |
526 | | ({ |
527 | editable?: true | false; |
528 | id: string; |
529 | modified_on?: string; |
530 | value: { [k: string]: unknown }; |
531 | [k: string]: unknown; |
532 | } & { |
533 | id?: "security_level"; |
534 | value?: |
535 | | "off" |
536 | | "essentially_off" |
537 | | "low" |
538 | | "medium" |
539 | | "high" |
540 | | "under_attack"; |
541 | [k: string]: unknown; |
542 | }) |
543 | | ({ |
544 | editable?: true | false; |
545 | id: string; |
546 | modified_on?: string; |
547 | value: { [k: string]: unknown }; |
548 | [k: string]: unknown; |
549 | } & { |
550 | id?: "server_side_exclude"; |
551 | value?: "on" | "off"; |
552 | [k: string]: unknown; |
553 | }) |
554 | | ({ |
555 | editable?: true | false; |
556 | id: string; |
557 | modified_on?: string; |
558 | value: { [k: string]: unknown }; |
559 | [k: string]: unknown; |
560 | } & { id?: "sha1_support"; value?: "off" | "on"; [k: string]: unknown }) |
561 | | ({ |
562 | editable?: true | false; |
563 | id: string; |
564 | modified_on?: string; |
565 | value: { [k: string]: unknown }; |
566 | [k: string]: unknown; |
567 | } & { |
568 | id?: "sort_query_string_for_cache"; |
569 | value?: "on" | "off"; |
570 | [k: string]: unknown; |
571 | } & string) |
572 | | ({ |
573 | editable?: true | false; |
574 | id: string; |
575 | modified_on?: string; |
576 | value: { [k: string]: unknown }; |
577 | [k: string]: unknown; |
578 | } & { |
579 | id?: "ssl"; |
580 | value?: "off" | "flexible" | "full" | "strict"; |
581 | [k: string]: unknown; |
582 | }) |
583 | | { enabled?: boolean; id?: "ssl_recommender"; [k: string]: unknown } |
584 | | ({ |
585 | editable?: true | false; |
586 | id: string; |
587 | modified_on?: string; |
588 | value: { [k: string]: unknown }; |
589 | [k: string]: unknown; |
590 | } & { id?: "tls_1_2_only"; value?: "off" | "on"; [k: string]: unknown }) |
591 | | ({ |
592 | editable?: true | false; |
593 | id: string; |
594 | modified_on?: string; |
595 | value: { [k: string]: unknown }; |
596 | [k: string]: unknown; |
597 | } & { |
598 | id?: "tls_1_3"; |
599 | value?: "on" | "off" | "zrt"; |
600 | [k: string]: unknown; |
601 | } & string) |
602 | | ({ |
603 | editable?: true | false; |
604 | id: string; |
605 | modified_on?: string; |
606 | value: { [k: string]: unknown }; |
607 | [k: string]: unknown; |
608 | } & { |
609 | id?: "tls_client_auth"; |
610 | value?: "on" | "off"; |
611 | [k: string]: unknown; |
612 | }) |
613 | | ({ |
614 | editable?: true | false; |
615 | id: string; |
616 | modified_on?: string; |
617 | value: { [k: string]: unknown }; |
618 | [k: string]: unknown; |
619 | } & { |
620 | id?: "true_client_ip_header"; |
621 | value?: "on" | "off"; |
622 | [k: string]: unknown; |
623 | } & string) |
624 | | ({ |
625 | editable?: true | false; |
626 | id: string; |
627 | modified_on?: string; |
628 | value: { [k: string]: unknown }; |
629 | [k: string]: unknown; |
630 | } & { id?: "waf"; value?: "on" | "off"; [k: string]: unknown }) |
631 | | ({ |
632 | editable?: true | false; |
633 | id: string; |
634 | modified_on?: string; |
635 | value: { [k: string]: unknown }; |
636 | [k: string]: unknown; |
637 | } & { id?: "webp"; value?: "off" | "on"; [k: string]: unknown }) |
638 | | ({ |
639 | editable?: true | false; |
640 | id: string; |
641 | modified_on?: string; |
642 | value: { [k: string]: unknown }; |
643 | [k: string]: unknown; |
644 | } & { id?: "websockets"; value?: "off" | "on"; [k: string]: unknown }) |
645 | )[]; |
646 | [k: string]: unknown; |
647 | } |
648 | ) { |
649 | const url = new URL( |
650 | `https://api.cloudflare.com/client/v4/zones/${zone_identifier}/settings` |
651 | ); |
652 |
|
653 | const response = await fetch(url, { |
654 | method: "PATCH", |
655 | headers: { |
656 | "X-AUTH-EMAIL": auth.email, |
657 | "X-AUTH-KEY": auth.key, |
658 | "Content-Type": "application/json", |
659 | Authorization: "Bearer " + auth.token, |
660 | }, |
661 | body: JSON.stringify(body), |
662 | }); |
663 | if (!response.ok) { |
664 | const text = await response.text(); |
665 | throw new Error(`${response.status} ${text}`); |
666 | } |
667 | return await response.json(); |
668 | } |
669 |
|