Modify the state of an issue

Makes a change to the specified issue.

Script bitbucket Verified

by hugo697 ยท 10/24/2023

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 375 days ago
1
type Bitbucket = {
2
  username: string;
3
  password: string;
4
};
5
/**
6
 * Modify the state of an issue
7
 * Makes a change to the specified issue.
8
 */
9
export async function main(
10
  auth: Bitbucket,
11
  issue_id: string,
12
  repo_slug: string,
13
  workspace: string,
14
  body: {
15
    type: string;
16
    links?: {
17
      self?: { href?: string; name?: string };
18
      issue?: { href?: string; name?: string };
19
    };
20
    name?: string;
21
    created_on?: string;
22
    user?: { type: string; [k: string]: unknown } & {
23
      links?: {
24
        avatar?: { href?: string; name?: string };
25
        [k: string]: unknown;
26
      };
27
      created_on?: string;
28
      display_name?: string;
29
      username?: string;
30
      uuid?: string;
31
      [k: string]: unknown;
32
    };
33
    issue?: { type: string; [k: string]: unknown } & {
34
      links?: {
35
        self?: { href?: string; name?: string };
36
        html?: { href?: string; name?: string };
37
        comments?: { href?: string; name?: string };
38
        attachments?: { href?: string; name?: string };
39
        watch?: { href?: string; name?: string };
40
        vote?: { href?: string; name?: string };
41
      };
42
      id?: number;
43
      repository?: { type: string; [k: string]: unknown } & {
44
        links?: {
45
          self?: { href?: string; name?: string };
46
          html?: { href?: string; name?: string };
47
          avatar?: { href?: string; name?: string };
48
          pullrequests?: { href?: string; name?: string };
49
          commits?: { href?: string; name?: string };
50
          forks?: { href?: string; name?: string };
51
          watchers?: { href?: string; name?: string };
52
          downloads?: { href?: string; name?: string };
53
          clone?: { href?: string; name?: string }[];
54
          hooks?: { href?: string; name?: string };
55
        };
56
        uuid?: string;
57
        full_name?: string;
58
        is_private?: boolean;
59
        parent?: unknown;
60
        scm?: "git";
61
        owner?: { type: string; [k: string]: unknown } & {
62
          links?: {
63
            avatar?: { href?: string; name?: string };
64
            [k: string]: unknown;
65
          };
66
          created_on?: string;
67
          display_name?: string;
68
          username?: string;
69
          uuid?: string;
70
          [k: string]: unknown;
71
        };
72
        name?: string;
73
        description?: string;
74
        created_on?: string;
75
        updated_on?: string;
76
        size?: number;
77
        language?: string;
78
        has_issues?: boolean;
79
        has_wiki?: boolean;
80
        fork_policy?: "allow_forks" | "no_public_forks" | "no_forks";
81
        project?: { type: string; [k: string]: unknown } & {
82
          links?: {
83
            html?: { href?: string; name?: string };
84
            avatar?: { href?: string; name?: string };
85
          };
86
          uuid?: string;
87
          key?: string;
88
          owner?: ({ type: string; [k: string]: unknown } & {
89
            links?: {
90
              avatar?: { href?: string; name?: string };
91
              [k: string]: unknown;
92
            };
93
            created_on?: string;
94
            display_name?: string;
95
            username?: string;
96
            uuid?: string;
97
            [k: string]: unknown;
98
          }) & {
99
            links?: {
100
              avatar?: { href?: string; name?: string };
101
              [k: string]: unknown;
102
            } & {
103
              self?: { href?: string; name?: string };
104
              html?: { href?: string; name?: string };
105
              members?: { href?: string; name?: string };
106
              projects?: { href?: string; name?: string };
107
              repositories?: { href?: string; name?: string };
108
              [k: string]: unknown;
109
            };
110
            [k: string]: unknown;
111
          };
112
          name?: string;
113
          description?: string;
114
          is_private?: boolean;
115
          created_on?: string;
116
          updated_on?: string;
117
          has_publicly_visible_repos?: boolean;
118
          [k: string]: unknown;
119
        };
120
        mainbranch?: {
121
          type: string;
122
          links?: {
123
            self?: { href?: string; name?: string };
124
            commits?: { href?: string; name?: string };
125
            html?: { href?: string; name?: string };
126
          };
127
          name?: string;
128
          target?: ({ type: string; [k: string]: unknown } & {
129
            hash?: string;
130
            date?: string;
131
            author?: { type: string; [k: string]: unknown } & {
132
              raw?: string;
133
              user?: { type: string; [k: string]: unknown } & {
134
                links?: {
135
                  avatar?: { href?: string; name?: string };
136
                  [k: string]: unknown;
137
                };
138
                created_on?: string;
139
                display_name?: string;
140
                username?: string;
141
                uuid?: string;
142
                [k: string]: unknown;
143
              };
144
              [k: string]: unknown;
145
            };
146
            message?: string;
147
            summary?: {
148
              raw?: string;
149
              markup?: "markdown" | "creole" | "plaintext";
150
              html?: string;
151
            };
152
            parents?: unknown[];
153
            [k: string]: unknown;
154
          }) & {
155
            repository?: unknown;
156
            participants?: ({ type: string; [k: string]: unknown } & {
157
              user?: { type: string; [k: string]: unknown } & {
158
                links?: {
159
                  avatar?: { href?: string; name?: string };
160
                  [k: string]: unknown;
161
                };
162
                created_on?: string;
163
                display_name?: string;
164
                username?: string;
165
                uuid?: string;
166
                [k: string]: unknown;
167
              };
168
              role?: "PARTICIPANT" | "REVIEWER";
169
              approved?: boolean;
170
              state?: "approved" | "changes_requested" | null;
171
              participated_on?: string;
172
              [k: string]: unknown;
173
            })[];
174
            [k: string]: unknown;
175
          };
176
          [k: string]: unknown;
177
        } & {
178
          merge_strategies?: ("merge_commit" | "squash" | "fast_forward")[];
179
          default_merge_strategy?: string;
180
          [k: string]: unknown;
181
        };
182
        [k: string]: unknown;
183
      };
184
      title?: string;
185
      reporter?: { type: string; [k: string]: unknown } & {
186
        links?: {
187
          avatar?: { href?: string; name?: string };
188
          [k: string]: unknown;
189
        };
190
        created_on?: string;
191
        display_name?: string;
192
        username?: string;
193
        uuid?: string;
194
        [k: string]: unknown;
195
      };
196
      assignee?: { type: string; [k: string]: unknown } & {
197
        links?: {
198
          avatar?: { href?: string; name?: string };
199
          [k: string]: unknown;
200
        };
201
        created_on?: string;
202
        display_name?: string;
203
        username?: string;
204
        uuid?: string;
205
        [k: string]: unknown;
206
      };
207
      created_on?: string;
208
      updated_on?: string;
209
      edited_on?: string;
210
      state?:
211
        | "submitted"
212
        | "new"
213
        | "open"
214
        | "resolved"
215
        | "on hold"
216
        | "invalid"
217
        | "duplicate"
218
        | "wontfix"
219
        | "closed";
220
      kind?: "bug" | "enhancement" | "proposal" | "task";
221
      priority?: "trivial" | "minor" | "major" | "critical" | "blocker";
222
      milestone?: { type: string; [k: string]: unknown } & {
223
        links?: { self?: { href?: string; name?: string } };
224
        name?: string;
225
        id?: number;
226
        [k: string]: unknown;
227
      };
228
      version?: { type: string; [k: string]: unknown } & {
229
        links?: { self?: { href?: string; name?: string } };
230
        name?: string;
231
        id?: number;
232
        [k: string]: unknown;
233
      };
234
      component?: { type: string; [k: string]: unknown } & {
235
        links?: { self?: { href?: string; name?: string } };
236
        name?: string;
237
        id?: number;
238
        [k: string]: unknown;
239
      };
240
      votes?: number;
241
      content?: {
242
        raw?: string;
243
        markup?: "markdown" | "creole" | "plaintext";
244
        html?: string;
245
      };
246
      [k: string]: unknown;
247
    };
248
    changes?: {
249
      assignee?: { old?: string; new?: string };
250
      state?: { old?: string; new?: string };
251
      title?: { old?: string; new?: string };
252
      kind?: { old?: string; new?: string };
253
      milestone?: { old?: string; new?: string };
254
      component?: { old?: string; new?: string };
255
      priority?: { old?: string; new?: string };
256
      version?: { old?: string; new?: string };
257
      content?: { old?: string; new?: string };
258
    };
259
    message?: {
260
      raw?: string;
261
      markup?: "markdown" | "creole" | "plaintext";
262
      html?: string;
263
    };
264
    [k: string]: unknown;
265
  }
266
) {
267
  const url = new URL(
268
    `https://api.bitbucket.org/2.0/repositories/${workspace}/${repo_slug}/issues/${issue_id}/changes`
269
  );
270

271
  const response = await fetch(url, {
272
    method: "POST",
273
    headers: {
274
      "Content-Type": "application/json",
275
      Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
276
    },
277
    body: JSON.stringify(body),
278
  });
279
  if (!response.ok) {
280
    const text = await response.text();
281
    throw new Error(`${response.status} ${text}`);
282
  }
283
  return await response.json();
284
}
285