1 | type Cloudflare = { |
2 | token: string; |
3 | email: string; |
4 | key: string; |
5 | }; |
6 | |
7 | * Patch DNS Record |
8 | * |
9 | */ |
10 | export async function main( |
11 | auth: Cloudflare, |
12 | identifier: string, |
13 | zone_identifier: string, |
14 | body: |
15 | | ({ |
16 | content?: string; |
17 | name?: string; |
18 | proxied?: boolean; |
19 | type?: "A"; |
20 | [k: string]: unknown; |
21 | } & { |
22 | comment?: string; |
23 | created_on?: string; |
24 | id?: string; |
25 | locked?: boolean; |
26 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
27 | modified_on?: string; |
28 | proxiable?: boolean; |
29 | tags?: string[]; |
30 | ttl?: (number | 1) & number; |
31 | zone_id?: string; |
32 | zone_name?: string; |
33 | [k: string]: unknown; |
34 | }) |
35 | | ({ |
36 | content?: string; |
37 | name?: string; |
38 | proxied?: boolean; |
39 | type?: "AAAA"; |
40 | [k: string]: unknown; |
41 | } & { |
42 | comment?: string; |
43 | created_on?: string; |
44 | id?: string; |
45 | locked?: boolean; |
46 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
47 | modified_on?: string; |
48 | proxiable?: boolean; |
49 | tags?: string[]; |
50 | ttl?: (number | 1) & number; |
51 | zone_id?: string; |
52 | zone_name?: string; |
53 | [k: string]: unknown; |
54 | }) |
55 | | ({ |
56 | content?: string; |
57 | data?: { |
58 | flags?: number; |
59 | tag?: string; |
60 | value?: string; |
61 | [k: string]: unknown; |
62 | }; |
63 | name?: string; |
64 | type?: "CAA"; |
65 | [k: string]: unknown; |
66 | } & { |
67 | comment?: string; |
68 | created_on?: string; |
69 | id?: string; |
70 | locked?: boolean; |
71 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
72 | modified_on?: string; |
73 | proxiable?: boolean; |
74 | tags?: string[]; |
75 | ttl?: (number | 1) & number; |
76 | zone_id?: string; |
77 | zone_name?: string; |
78 | [k: string]: unknown; |
79 | }) |
80 | | ({ |
81 | content?: string; |
82 | data?: { |
83 | algorithm?: number; |
84 | certificate?: string; |
85 | key_tag?: number; |
86 | type?: number; |
87 | [k: string]: unknown; |
88 | }; |
89 | name?: string; |
90 | type?: "CERT"; |
91 | [k: string]: unknown; |
92 | } & { |
93 | comment?: string; |
94 | created_on?: string; |
95 | id?: string; |
96 | locked?: boolean; |
97 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
98 | modified_on?: string; |
99 | proxiable?: boolean; |
100 | tags?: string[]; |
101 | ttl?: (number | 1) & number; |
102 | zone_id?: string; |
103 | zone_name?: string; |
104 | [k: string]: unknown; |
105 | }) |
106 | | ({ |
107 | content?: { [k: string]: unknown }; |
108 | name?: string; |
109 | proxied?: boolean; |
110 | type?: "CNAME"; |
111 | [k: string]: unknown; |
112 | } & { |
113 | comment?: string; |
114 | created_on?: string; |
115 | id?: string; |
116 | locked?: boolean; |
117 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
118 | modified_on?: string; |
119 | proxiable?: boolean; |
120 | tags?: string[]; |
121 | ttl?: (number | 1) & number; |
122 | zone_id?: string; |
123 | zone_name?: string; |
124 | [k: string]: unknown; |
125 | }) |
126 | | ({ |
127 | content?: string; |
128 | data?: { |
129 | algorithm?: number; |
130 | flags?: number; |
131 | protocol?: number; |
132 | public_key?: string; |
133 | [k: string]: unknown; |
134 | }; |
135 | name?: string; |
136 | type?: "DNSKEY"; |
137 | [k: string]: unknown; |
138 | } & { |
139 | comment?: string; |
140 | created_on?: string; |
141 | id?: string; |
142 | locked?: boolean; |
143 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
144 | modified_on?: string; |
145 | proxiable?: boolean; |
146 | tags?: string[]; |
147 | ttl?: (number | 1) & number; |
148 | zone_id?: string; |
149 | zone_name?: string; |
150 | [k: string]: unknown; |
151 | }) |
152 | | ({ |
153 | content?: string; |
154 | data?: { |
155 | algorithm?: number; |
156 | digest?: string; |
157 | digest_type?: number; |
158 | key_tag?: number; |
159 | [k: string]: unknown; |
160 | }; |
161 | name?: string; |
162 | type?: "DS"; |
163 | [k: string]: unknown; |
164 | } & { |
165 | comment?: string; |
166 | created_on?: string; |
167 | id?: string; |
168 | locked?: boolean; |
169 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
170 | modified_on?: string; |
171 | proxiable?: boolean; |
172 | tags?: string[]; |
173 | ttl?: (number | 1) & number; |
174 | zone_id?: string; |
175 | zone_name?: string; |
176 | [k: string]: unknown; |
177 | }) |
178 | | ({ |
179 | content?: string; |
180 | data?: { |
181 | priority?: number; |
182 | target?: string; |
183 | value?: string; |
184 | [k: string]: unknown; |
185 | }; |
186 | name?: string; |
187 | type?: "HTTPS"; |
188 | [k: string]: unknown; |
189 | } & { |
190 | comment?: string; |
191 | created_on?: string; |
192 | id?: string; |
193 | locked?: boolean; |
194 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
195 | modified_on?: string; |
196 | proxiable?: boolean; |
197 | tags?: string[]; |
198 | ttl?: (number | 1) & number; |
199 | zone_id?: string; |
200 | zone_name?: string; |
201 | [k: string]: unknown; |
202 | }) |
203 | | ({ |
204 | content?: string; |
205 | data?: { |
206 | altitude?: number; |
207 | lat_degrees?: number; |
208 | lat_direction?: "N" | "S"; |
209 | lat_minutes?: number; |
210 | lat_seconds?: number; |
211 | long_degrees?: number; |
212 | long_direction?: "E" | "W"; |
213 | long_minutes?: number; |
214 | long_seconds?: number; |
215 | precision_horz?: number; |
216 | precision_vert?: number; |
217 | size?: number; |
218 | [k: string]: unknown; |
219 | }; |
220 | name?: string; |
221 | type?: "LOC"; |
222 | [k: string]: unknown; |
223 | } & { |
224 | comment?: string; |
225 | created_on?: string; |
226 | id?: string; |
227 | locked?: boolean; |
228 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
229 | modified_on?: string; |
230 | proxiable?: boolean; |
231 | tags?: string[]; |
232 | ttl?: (number | 1) & number; |
233 | zone_id?: string; |
234 | zone_name?: string; |
235 | [k: string]: unknown; |
236 | }) |
237 | | ({ |
238 | content?: string; |
239 | name?: string; |
240 | priority?: number; |
241 | type?: "MX"; |
242 | [k: string]: unknown; |
243 | } & { |
244 | comment?: string; |
245 | created_on?: string; |
246 | id?: string; |
247 | locked?: boolean; |
248 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
249 | modified_on?: string; |
250 | proxiable?: boolean; |
251 | tags?: string[]; |
252 | ttl?: (number | 1) & number; |
253 | zone_id?: string; |
254 | zone_name?: string; |
255 | [k: string]: unknown; |
256 | }) |
257 | | ({ |
258 | content?: string; |
259 | data?: { |
260 | flags?: string; |
261 | order?: number; |
262 | preference?: number; |
263 | regex?: string; |
264 | replacement?: string; |
265 | service?: string; |
266 | [k: string]: unknown; |
267 | }; |
268 | name?: string; |
269 | type?: "NAPTR"; |
270 | [k: string]: unknown; |
271 | } & { |
272 | comment?: string; |
273 | created_on?: string; |
274 | id?: string; |
275 | locked?: boolean; |
276 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
277 | modified_on?: string; |
278 | proxiable?: boolean; |
279 | tags?: string[]; |
280 | ttl?: (number | 1) & number; |
281 | zone_id?: string; |
282 | zone_name?: string; |
283 | [k: string]: unknown; |
284 | }) |
285 | | ({ |
286 | content?: { [k: string]: unknown }; |
287 | name?: string; |
288 | type?: "NS"; |
289 | [k: string]: unknown; |
290 | } & { |
291 | comment?: string; |
292 | created_on?: string; |
293 | id?: string; |
294 | locked?: boolean; |
295 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
296 | modified_on?: string; |
297 | proxiable?: boolean; |
298 | tags?: string[]; |
299 | ttl?: (number | 1) & number; |
300 | zone_id?: string; |
301 | zone_name?: string; |
302 | [k: string]: unknown; |
303 | }) |
304 | | ({ |
305 | content?: string; |
306 | name?: string; |
307 | type?: "PTR"; |
308 | [k: string]: unknown; |
309 | } & { |
310 | comment?: string; |
311 | created_on?: string; |
312 | id?: string; |
313 | locked?: boolean; |
314 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
315 | modified_on?: string; |
316 | proxiable?: boolean; |
317 | tags?: string[]; |
318 | ttl?: (number | 1) & number; |
319 | zone_id?: string; |
320 | zone_name?: string; |
321 | [k: string]: unknown; |
322 | }) |
323 | | ({ |
324 | content?: string; |
325 | data?: { |
326 | certificate?: string; |
327 | matching_type?: number; |
328 | selector?: number; |
329 | usage?: number; |
330 | [k: string]: unknown; |
331 | }; |
332 | name?: string; |
333 | type?: "SMIMEA"; |
334 | [k: string]: unknown; |
335 | } & { |
336 | comment?: string; |
337 | created_on?: string; |
338 | id?: string; |
339 | locked?: boolean; |
340 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
341 | modified_on?: string; |
342 | proxiable?: boolean; |
343 | tags?: string[]; |
344 | ttl?: (number | 1) & number; |
345 | zone_id?: string; |
346 | zone_name?: string; |
347 | [k: string]: unknown; |
348 | }) |
349 | | ({ |
350 | content?: string; |
351 | data?: { |
352 | name?: string; |
353 | port?: number; |
354 | priority?: number; |
355 | proto?: string; |
356 | service?: string; |
357 | target?: string; |
358 | weight?: number; |
359 | [k: string]: unknown; |
360 | }; |
361 | name?: string; |
362 | type?: "SRV"; |
363 | [k: string]: unknown; |
364 | } & { |
365 | comment?: string; |
366 | created_on?: string; |
367 | id?: string; |
368 | locked?: boolean; |
369 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
370 | modified_on?: string; |
371 | proxiable?: boolean; |
372 | tags?: string[]; |
373 | ttl?: (number | 1) & number; |
374 | zone_id?: string; |
375 | zone_name?: string; |
376 | [k: string]: unknown; |
377 | }) |
378 | | ({ |
379 | content?: string; |
380 | data?: { |
381 | algorithm?: number; |
382 | fingerprint?: string; |
383 | type?: number; |
384 | [k: string]: unknown; |
385 | }; |
386 | name?: string; |
387 | type?: "SSHFP"; |
388 | [k: string]: unknown; |
389 | } & { |
390 | comment?: string; |
391 | created_on?: string; |
392 | id?: string; |
393 | locked?: boolean; |
394 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
395 | modified_on?: string; |
396 | proxiable?: boolean; |
397 | tags?: string[]; |
398 | ttl?: (number | 1) & number; |
399 | zone_id?: string; |
400 | zone_name?: string; |
401 | [k: string]: unknown; |
402 | }) |
403 | | ({ |
404 | content?: string; |
405 | data?: { |
406 | priority?: number; |
407 | target?: string; |
408 | value?: string; |
409 | [k: string]: unknown; |
410 | }; |
411 | name?: string; |
412 | type?: "SVCB"; |
413 | [k: string]: unknown; |
414 | } & { |
415 | comment?: string; |
416 | created_on?: string; |
417 | id?: string; |
418 | locked?: boolean; |
419 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
420 | modified_on?: string; |
421 | proxiable?: boolean; |
422 | tags?: string[]; |
423 | ttl?: (number | 1) & number; |
424 | zone_id?: string; |
425 | zone_name?: string; |
426 | [k: string]: unknown; |
427 | }) |
428 | | ({ |
429 | content?: string; |
430 | data?: { |
431 | certificate?: string; |
432 | matching_type?: number; |
433 | selector?: number; |
434 | usage?: number; |
435 | [k: string]: unknown; |
436 | }; |
437 | name?: string; |
438 | type?: "TLSA"; |
439 | [k: string]: unknown; |
440 | } & { |
441 | comment?: string; |
442 | created_on?: string; |
443 | id?: string; |
444 | locked?: boolean; |
445 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
446 | modified_on?: string; |
447 | proxiable?: boolean; |
448 | tags?: string[]; |
449 | ttl?: (number | 1) & number; |
450 | zone_id?: string; |
451 | zone_name?: string; |
452 | [k: string]: unknown; |
453 | }) |
454 | | ({ |
455 | content?: string; |
456 | name?: string; |
457 | type?: "TXT"; |
458 | [k: string]: unknown; |
459 | } & { |
460 | comment?: string; |
461 | created_on?: string; |
462 | id?: string; |
463 | locked?: boolean; |
464 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
465 | modified_on?: string; |
466 | proxiable?: boolean; |
467 | tags?: string[]; |
468 | ttl?: (number | 1) & number; |
469 | zone_id?: string; |
470 | zone_name?: string; |
471 | [k: string]: unknown; |
472 | }) |
473 | | ({ |
474 | content?: string; |
475 | data?: { content?: string; weight?: number; [k: string]: unknown }; |
476 | name?: string; |
477 | priority?: number; |
478 | type?: "URI"; |
479 | [k: string]: unknown; |
480 | } & { |
481 | comment?: string; |
482 | created_on?: string; |
483 | id?: string; |
484 | locked?: boolean; |
485 | meta?: { auto_added?: boolean; source?: string; [k: string]: unknown }; |
486 | modified_on?: string; |
487 | proxiable?: boolean; |
488 | tags?: string[]; |
489 | ttl?: (number | 1) & number; |
490 | zone_id?: string; |
491 | zone_name?: string; |
492 | [k: string]: unknown; |
493 | }) |
494 | ) { |
495 | const url = new URL( |
496 | `https://api.cloudflare.com/client/v4/zones/${zone_identifier}/dns_records/${identifier}` |
497 | ); |
498 |
|
499 | const response = await fetch(url, { |
500 | method: "PATCH", |
501 | headers: { |
502 | "X-AUTH-EMAIL": auth.email, |
503 | "X-AUTH-KEY": auth.key, |
504 | "Content-Type": "application/json", |
505 | Authorization: "Bearer " + auth.token, |
506 | }, |
507 | body: JSON.stringify(body), |
508 | }); |
509 | if (!response.ok) { |
510 | const text = await response.text(); |
511 | throw new Error(`${response.status} ${text}`); |
512 | } |
513 | return await response.json(); |
514 | } |
515 |
|