Create project

Create a new project.

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
 * 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