0
Create an issue
One script reply has been approved by the moderators Verified

Creates a new issue.

This call requires authentication. Private repositories or private issue trackers require the caller to authenticate with an account that has appropriate authorization.

The authenticated user is used for the issue's reporter field.

Created by hugo697 320 days ago Viewed 8976 times
0
Submitted by hugo697 Typescript (fetch-only)
Verified 320 days ago
1
type Bitbucket = {
2
  username: string;
3
  password: string;
4
};
5
/**
6
 * Create an issue
7
 * Creates a new issue.
8

9
This call requires authentication. Private repositories or private
10
issue trackers require the caller to authenticate with an account that
11
has appropriate authorization.
12

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

239
  const response = await fetch(url, {
240
    method: "POST",
241
    headers: {
242
      "Content-Type": "application/json",
243
      Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
244
    },
245
    body: JSON.stringify(body),
246
  });
247
  if (!response.ok) {
248
    const text = await response.text();
249
    throw new Error(`${response.status} ${text}`);
250
  }
251
  return await response.json();
252
}
253