1 | type Cloudflare = { |
2 | token: string; |
3 | email: string; |
4 | key: string; |
5 | }; |
6 | |
7 | * Create project |
8 | * Create a new project. |
9 | */ |
10 | export async function main( |
11 | auth: Cloudflare, |
12 | account_identifier: string, |
13 | body: { |
14 | build_config?: { |
15 | build_caching?: boolean; |
16 | build_command?: string; |
17 | destination_dir?: string; |
18 | root_dir?: string; |
19 | web_analytics_tag?: string; |
20 | web_analytics_token?: string; |
21 | [k: string]: unknown; |
22 | }; |
23 | canonical_deployment?: { |
24 | aliases?: unknown[]; |
25 | build_config?: { [k: string]: unknown }; |
26 | created_on?: string; |
27 | deployment_trigger?: { |
28 | metadata?: { |
29 | branch?: string; |
30 | commit_hash?: string; |
31 | commit_message?: string; |
32 | [k: string]: unknown; |
33 | }; |
34 | type?: string; |
35 | [k: string]: unknown; |
36 | }; |
37 | env_vars?: { [k: string]: unknown }; |
38 | environment?: string; |
39 | id?: string; |
40 | is_skipped?: boolean; |
41 | latest_stage?: { [k: string]: unknown }; |
42 | modified_on?: string; |
43 | project_id?: string; |
44 | project_name?: string; |
45 | short_id?: string; |
46 | source?: { [k: string]: unknown }; |
47 | stages?: { |
48 | ended_on?: string; |
49 | name?: string; |
50 | started_on?: string; |
51 | status?: string; |
52 | [k: string]: unknown; |
53 | }[]; |
54 | url?: string; |
55 | [k: string]: unknown; |
56 | }; |
57 | created_on?: string; |
58 | deployment_configs?: { |
59 | preview?: { |
60 | ai_bindings?: { |
61 | AI_BINDING?: { project_id?: unknown; [k: string]: unknown }; |
62 | [k: string]: unknown; |
63 | }; |
64 | analytics_engine_datasets?: { |
65 | ANALYTICS_ENGINE_BINDING?: { dataset?: string; [k: string]: unknown }; |
66 | [k: string]: unknown; |
67 | }; |
68 | compatibility_date?: string; |
69 | compatibility_flags?: unknown[]; |
70 | d1_databases?: { |
71 | D1_BINDING?: { id?: string; [k: string]: unknown }; |
72 | [k: string]: unknown; |
73 | }; |
74 | durable_object_namespaces?: { |
75 | DO_BINDING?: { namespace_id?: string; [k: string]: unknown }; |
76 | [k: string]: unknown; |
77 | }; |
78 | env_vars?: { |
79 | ENVIRONMENT_VARIABLE?: { |
80 | type?: "plain_text" | "secret_text"; |
81 | value?: string; |
82 | [k: string]: unknown; |
83 | }; |
84 | [k: string]: unknown; |
85 | }; |
86 | kv_namespaces?: { |
87 | KV_BINDING?: { namespace_id?: string; [k: string]: unknown }; |
88 | [k: string]: unknown; |
89 | }; |
90 | placement?: { mode?: string; [k: string]: unknown }; |
91 | queue_producers?: { |
92 | QUEUE_PRODUCER_BINDING?: { name?: string; [k: string]: unknown }; |
93 | [k: string]: unknown; |
94 | }; |
95 | r2_buckets?: { |
96 | R2_BINDING?: { name?: string; [k: string]: unknown }; |
97 | [k: string]: unknown; |
98 | }; |
99 | service_bindings?: { |
100 | SERVICE_BINDING?: { |
101 | environment?: string; |
102 | service?: string; |
103 | [k: string]: unknown; |
104 | }; |
105 | [k: string]: unknown; |
106 | }; |
107 | [k: string]: unknown; |
108 | }; |
109 | production?: { |
110 | ai_bindings?: { |
111 | AI_BINDING?: { project_id?: unknown; [k: string]: unknown }; |
112 | [k: string]: unknown; |
113 | }; |
114 | analytics_engine_datasets?: { |
115 | ANALYTICS_ENGINE_BINDING?: { dataset?: string; [k: string]: unknown }; |
116 | [k: string]: unknown; |
117 | }; |
118 | compatibility_date?: string; |
119 | compatibility_flags?: unknown[]; |
120 | d1_databases?: { |
121 | D1_BINDING?: { id?: string; [k: string]: unknown }; |
122 | [k: string]: unknown; |
123 | }; |
124 | durable_object_namespaces?: { |
125 | DO_BINDING?: { namespace_id?: string; [k: string]: unknown }; |
126 | [k: string]: unknown; |
127 | }; |
128 | env_vars?: { |
129 | ENVIRONMENT_VARIABLE?: { |
130 | type?: "plain_text" | "secret_text"; |
131 | value?: string; |
132 | [k: string]: unknown; |
133 | }; |
134 | [k: string]: unknown; |
135 | }; |
136 | kv_namespaces?: { |
137 | KV_BINDING?: { namespace_id?: string; [k: string]: unknown }; |
138 | [k: string]: unknown; |
139 | }; |
140 | placement?: { mode?: string; [k: string]: unknown }; |
141 | queue_producers?: { |
142 | QUEUE_PRODUCER_BINDING?: { name?: string; [k: string]: unknown }; |
143 | [k: string]: unknown; |
144 | }; |
145 | r2_buckets?: { |
146 | R2_BINDING?: { name?: string; [k: string]: unknown }; |
147 | [k: string]: unknown; |
148 | }; |
149 | service_bindings?: { |
150 | SERVICE_BINDING?: { |
151 | environment?: string; |
152 | service?: string; |
153 | [k: string]: unknown; |
154 | }; |
155 | [k: string]: unknown; |
156 | }; |
157 | [k: string]: unknown; |
158 | }; |
159 | [k: string]: unknown; |
160 | }; |
161 | domains?: unknown[]; |
162 | id?: string; |
163 | latest_deployment?: { |
164 | aliases?: unknown[]; |
165 | build_config?: { [k: string]: unknown }; |
166 | created_on?: string; |
167 | deployment_trigger?: { |
168 | metadata?: { |
169 | branch?: string; |
170 | commit_hash?: string; |
171 | commit_message?: string; |
172 | [k: string]: unknown; |
173 | }; |
174 | type?: string; |
175 | [k: string]: unknown; |
176 | }; |
177 | env_vars?: { [k: string]: unknown }; |
178 | environment?: string; |
179 | id?: string; |
180 | is_skipped?: boolean; |
181 | latest_stage?: { [k: string]: unknown }; |
182 | modified_on?: string; |
183 | project_id?: string; |
184 | project_name?: string; |
185 | short_id?: string; |
186 | source?: { [k: string]: unknown }; |
187 | stages?: { |
188 | ended_on?: string; |
189 | name?: string; |
190 | started_on?: string; |
191 | status?: string; |
192 | [k: string]: unknown; |
193 | }[]; |
194 | url?: string; |
195 | [k: string]: unknown; |
196 | }; |
197 | name?: string; |
198 | production_branch?: string; |
199 | source?: { [k: string]: unknown }; |
200 | subdomain?: string; |
201 | [k: string]: unknown; |
202 | } |
203 | ) { |
204 | const url = new URL( |
205 | `https://api.cloudflare.com/client/v4/accounts/${account_identifier}/pages/projects` |
206 | ); |
207 |
|
208 | const response = await fetch(url, { |
209 | method: "POST", |
210 | headers: { |
211 | "X-AUTH-EMAIL": auth.email, |
212 | "X-AUTH-KEY": auth.key, |
213 | "Content-Type": "application/json", |
214 | Authorization: "Bearer " + auth.token, |
215 | }, |
216 | body: JSON.stringify(body), |
217 | }); |
218 | if (!response.ok) { |
219 | const text = await response.text(); |
220 | throw new Error(`${response.status} ${text}`); |
221 | } |
222 | return await response.json(); |
223 | } |
224 |
|