1 | |
2 |
|
3 | export type DynSelect_zone_id = string |
4 |
|
5 | |
6 | |
7 | export async function zone_id(auth: RT.Cloudflare) { |
8 | const response = await fetch( |
9 | "https://api.cloudflare.com/client/v4/zones?per_page=50", |
10 | { |
11 | headers: { |
12 | Authorization: `Bearer ${auth.token}`, |
13 | Accept: "application/json", |
14 | }, |
15 | } |
16 | ) |
17 | if (!response.ok) { |
18 | throw new Error(`${response.status} ${await response.text()}`) |
19 | } |
20 | const { result } = (await response.json()) as { |
21 | result: { id: string; name: string }[] |
22 | } |
23 | return result.map((z) => ({ value: z.id, label: z.name })) |
24 | } |
25 |
|
26 | |
27 | * Create DNS Record |
28 | * Create a DNS record in a zone. ttl 1 means automatic; proxied only applies to A, AAAA and CNAME records. |
29 | */ |
30 | export async function main( |
31 | auth: RT.Cloudflare, |
32 | zone_id: DynSelect_zone_id, |
33 | type: |
34 | | "A" |
35 | | "AAAA" |
36 | | "CNAME" |
37 | | "MX" |
38 | | "TXT" |
39 | | "NS" |
40 | | "SRV" |
41 | | "CAA" |
42 | | "PTR" |
43 | | "HTTPS" |
44 | | "SVCB" |
45 | | "LOC" |
46 | | "NAPTR" |
47 | | "CERT" |
48 | | "DNSKEY" |
49 | | "DS" |
50 | | "SMIMEA" |
51 | | "SSHFP" |
52 | | "TLSA" |
53 | | "URI" |
54 | | "OPENPGPKEY", |
55 | name: string, |
56 | content: string, |
57 | ttl: number | undefined, |
58 | proxied: boolean | undefined, |
59 | priority: number | undefined, |
60 | comment: string | undefined |
61 | ) { |
62 | const response = await fetch( |
63 | `https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records`, |
64 | { |
65 | method: "POST", |
66 | headers: { |
67 | Authorization: `Bearer ${auth.token}`, |
68 | "Content-Type": "application/json", |
69 | Accept: "application/json", |
70 | }, |
71 | body: JSON.stringify({ |
72 | type, |
73 | name, |
74 | content, |
75 | ttl: ttl ?? 1, |
76 | proxied: proxied ?? undefined, |
77 | priority: priority ?? undefined, |
78 | comment: comment ?? undefined, |
79 | }), |
80 | } |
81 | ) |
82 |
|
83 | if (!response.ok) { |
84 | throw new Error(`${response.status} ${await response.text()}`) |
85 | } |
86 |
|
87 | return await response.json() |
88 | } |
89 |
|