1 | type Cloudflare = { |
2 | token: string; |
3 | email: string; |
4 | key: string; |
5 | }; |
6 | |
7 | * Upload Worker Module |
8 | * Upload a worker module. |
9 | */ |
10 | export async function main( |
11 | auth: Cloudflare, |
12 | script_name: string, |
13 | account_identifier: string, |
14 | rollback_to: string | undefined, |
15 | body: |
16 | | { |
17 | "<any part name>"?: string[]; |
18 | metadata?: { |
19 | bindings?: { [k: string]: unknown }[]; |
20 | body_part?: string; |
21 | compatibility_date?: string; |
22 | compatibility_flags?: string[]; |
23 | keep_bindings?: string[]; |
24 | logpush?: boolean; |
25 | main_module?: string; |
26 | migrations?: |
27 | | ({ new_tag?: string; old_tag?: string; [k: string]: unknown } & { |
28 | deleted_classes?: string[]; |
29 | new_classes?: string[]; |
30 | renamed_classes?: { |
31 | from?: string; |
32 | to?: string; |
33 | [k: string]: unknown; |
34 | }[]; |
35 | transferred_classes?: { |
36 | from?: string; |
37 | from_script?: string; |
38 | to?: string; |
39 | [k: string]: unknown; |
40 | }[]; |
41 | [k: string]: unknown; |
42 | }) |
43 | | ({ new_tag?: string; old_tag?: string; [k: string]: unknown } & { |
44 | steps?: { |
45 | deleted_classes?: string[]; |
46 | new_classes?: string[]; |
47 | renamed_classes?: { |
48 | from?: string; |
49 | to?: string; |
50 | [k: string]: unknown; |
51 | }[]; |
52 | transferred_classes?: { |
53 | from?: string; |
54 | from_script?: string; |
55 | to?: string; |
56 | [k: string]: unknown; |
57 | }[]; |
58 | [k: string]: unknown; |
59 | }[]; |
60 | [k: string]: unknown; |
61 | }); |
62 | placement?: { mode?: "smart"; [k: string]: unknown }; |
63 | tags?: string[]; |
64 | tail_consumers?: { |
65 | environment?: string; |
66 | namespace?: string; |
67 | service: string; |
68 | [k: string]: unknown; |
69 | }[]; |
70 | usage_model?: "bundled" | "unbound"; |
71 | version_tags?: { [k: string]: unknown }; |
72 | [k: string]: unknown; |
73 | }; |
74 | [k: string]: unknown; |
75 | } |
76 | | { message?: string; [k: string]: unknown } |
77 | ) { |
78 | const url = new URL( |
79 | `https://api.cloudflare.com/client/v4/accounts/${account_identifier}/workers/scripts/${script_name}` |
80 | ); |
81 | for (const [k, v] of [["rollback_to", rollback_to]]) { |
82 | if (v !== undefined && v !== "") { |
83 | url.searchParams.append(k, v); |
84 | } |
85 | } |
86 | const formData = new FormData(); |
87 | for (const [k, v] of Object.entries(body)) { |
88 | if (v !== undefined && v !== "") { |
89 | formData.append(k, String(v)); |
90 | } |
91 | } |
92 | const response = await fetch(url, { |
93 | method: "PUT", |
94 | headers: { |
95 | "X-AUTH-EMAIL": auth.email, |
96 | "X-AUTH-KEY": auth.key, |
97 | Authorization: "Bearer " + auth.token, |
98 | }, |
99 | body: formData, |
100 | }); |
101 | if (!response.ok) { |
102 | const text = await response.text(); |
103 | throw new Error(`${response.status} ${text}`); |
104 | } |
105 | return await response.json(); |
106 | } |
107 |
|