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 |
|