Update a project for a workspace

Since this endpoint can be used to both update and to create a project, the request body depends on the intent.

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
 * Update a project for a workspace
7
 * Since this endpoint can be used to both update and to create a
8
project, the request body depends on the intent.
9
 */
10
export async function main(
11
  auth: Bitbucket,
12
  project_key: string,
13
  workspace: string,
14
  body: { type: string; [k: string]: unknown } & {
15
    links?: {
16
      html?: { href?: string; name?: string };
17
      avatar?: { href?: string; name?: string };
18
    };
19
    uuid?: string;
20
    key?: string;
21
    owner?: ({ type: string; [k: string]: unknown } & {
22
      links?: {
23
        avatar?: { href?: string; name?: string };
24
        [k: string]: unknown;
25
      };
26
      created_on?: string;
27
      display_name?: string;
28
      username?: string;
29
      uuid?: string;
30
      [k: string]: unknown;
31
    }) & {
32
      links?: {
33
        avatar?: { href?: string; name?: string };
34
        [k: string]: unknown;
35
      } & {
36
        self?: { href?: string; name?: string };
37
        html?: { href?: string; name?: string };
38
        members?: { href?: string; name?: string };
39
        projects?: { href?: string; name?: string };
40
        repositories?: { href?: string; name?: string };
41
        [k: string]: unknown;
42
      };
43
      [k: string]: unknown;
44
    };
45
    name?: string;
46
    description?: string;
47
    is_private?: boolean;
48
    created_on?: string;
49
    updated_on?: string;
50
    has_publicly_visible_repos?: boolean;
51
    [k: string]: unknown;
52
  }
53
) {
54
  const url = new URL(
55
    `https://api.bitbucket.org/2.0/workspaces/${workspace}/projects/${project_key}`
56
  );
57

58
  const response = await fetch(url, {
59
    method: "PUT",
60
    headers: {
61
      "Content-Type": "application/json",
62
      Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
63
    },
64
    body: JSON.stringify(body),
65
  });
66
  if (!response.ok) {
67
    const text = await response.text();
68
    throw new Error(`${response.status} ${text}`);
69
  }
70
  return await response.json();
71
}
72