Create a comment on an issue

Creates a new issue comment. ``` $ curl https://api.bitbucket.org/2.0/repositories/atlassian/prlinks/issues/42/comments/ \ -X POST -u evzijst \ -H 'Content-Type: application/json' \ -d '{"content": {"raw": "Lorem ipsum."}}' ```

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
 * Create a comment on an issue
7
 * Creates a new issue comment.
8

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

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