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