Patch Script Settings

Patch script metadata, such as bindings

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
 * Patch Script Settings
8
 * Patch script metadata, such as bindings
9
 */
10
export async function main(
11
  auth: Cloudflare,
12
  account_identifier: string,
13
  dispatch_namespace: string,
14
  script_name: string,
15
  body: {
16
    bindings?: (
17
      | {
18
          name: string;
19
          namespace_id: string;
20
          type: "kv_namespace";
21
          [k: string]: unknown;
22
        }
23
      | {
24
          environment: string;
25
          name: string;
26
          service: string;
27
          type: "service";
28
          [k: string]: unknown;
29
        }
30
      | {
31
          class_name: string;
32
          environment?: string;
33
          name: string;
34
          namespace_id?: string;
35
          script_name?: string;
36
          type: "durable_object_namespace";
37
          [k: string]: unknown;
38
        }
39
      | {
40
          bucket_name: string;
41
          name: string;
42
          type: "r2_bucket";
43
          [k: string]: unknown;
44
        }
45
      | {
46
          name: string;
47
          queue_name: string;
48
          type: "queue";
49
          [k: string]: unknown;
50
        }
51
      | {
52
          binding: string;
53
          id: string;
54
          name: string;
55
          type: "d1";
56
          [k: string]: unknown;
57
        }
58
      | {
59
          name: string;
60
          namespace: string;
61
          outbound?: {
62
            params?: string[];
63
            worker?: {
64
              environment?: string;
65
              service?: string;
66
              [k: string]: unknown;
67
            };
68
            [k: string]: unknown;
69
          };
70
          type: "dispatch_namespace";
71
          [k: string]: unknown;
72
        }
73
      | {
74
          certificate_id?: string;
75
          name: string;
76
          type: "mtls_certificate";
77
          [k: string]: unknown;
78
        }
79
    )[];
80
    compatibility_date?: string;
81
    compatibility_flags?: string[];
82
    logpush?: boolean;
83
    migrations?:
84
      | ({ new_tag?: string; old_tag?: string; [k: string]: unknown } & {
85
          deleted_classes?: string[];
86
          new_classes?: string[];
87
          renamed_classes?: {
88
            from?: string;
89
            to?: string;
90
            [k: string]: unknown;
91
          }[];
92
          transferred_classes?: {
93
            from?: string;
94
            from_script?: string;
95
            to?: string;
96
            [k: string]: unknown;
97
          }[];
98
          [k: string]: unknown;
99
        })
100
      | ({ new_tag?: string; old_tag?: string; [k: string]: unknown } & {
101
          steps?: {
102
            deleted_classes?: string[];
103
            new_classes?: string[];
104
            renamed_classes?: {
105
              from?: string;
106
              to?: string;
107
              [k: string]: unknown;
108
            }[];
109
            transferred_classes?: {
110
              from?: string;
111
              from_script?: string;
112
              to?: string;
113
              [k: string]: unknown;
114
            }[];
115
            [k: string]: unknown;
116
          }[];
117
          [k: string]: unknown;
118
        });
119
    placement?: { mode?: "smart"; [k: string]: unknown };
120
    tags?: string[];
121
    tail_consumers?: {
122
      environment?: string;
123
      namespace?: string;
124
      service: string;
125
      [k: string]: unknown;
126
    }[];
127
    usage_model?: string;
128
    [k: string]: unknown;
129
  }
130
) {
131
  const url = new URL(
132
    `https://api.cloudflare.com/client/v4/accounts/${account_identifier}/workers/dispatch/namespaces/${dispatch_namespace}/scripts/${script_name}/settings`
133
  );
134

135
  const response = await fetch(url, {
136
    method: "PATCH",
137
    headers: {
138
      "X-AUTH-EMAIL": auth.email,
139
      "X-AUTH-KEY": auth.key,
140
      "Content-Type": "application/json",
141
      Authorization: "Bearer " + auth.token,
142
    },
143
    body: JSON.stringify(body),
144
  });
145
  if (!response.ok) {
146
    const text = await response.text();
147
    throw new Error(`${response.status} ${text}`);
148
  }
149
  return await response.json();
150
}
151