0

Create issue link

by
Published Nov 2, 2023

Creates a link between two issues.

Script jira
  • Submitted by hugo697 Typescript (fetch-only)
    Created 527 days ago
    1
    type Jira = {
    2
      username: string;
    3
      password: string;
    4
      domain: string;
    5
    };
    6
    /**
    7
     * Create issue link
    8
     * Creates a link between two issues.
    9
     */
    10
    export async function main(
    11
      auth: Jira,
    12
      body: {
    13
        comment?: {
    14
          author?: {
    15
            accountId?: string;
    16
            accountType?: string;
    17
            active?: boolean;
    18
            avatarUrls?: {
    19
              "16x16"?: string;
    20
              "24x24"?: string;
    21
              "32x32"?: string;
    22
              "48x48"?: string;
    23
            };
    24
            displayName?: string;
    25
            emailAddress?: string;
    26
            key?: string;
    27
            name?: string;
    28
            self?: string;
    29
            timeZone?: string;
    30
          };
    31
          body?: string;
    32
          created?: string;
    33
          id?: string;
    34
          jsdAuthorCanSeeRequest?: boolean;
    35
          jsdPublic?: boolean;
    36
          properties?: { key?: string; value?: { [k: string]: unknown } }[];
    37
          renderedBody?: string;
    38
          self?: string;
    39
          updateAuthor?: {
    40
            accountId?: string;
    41
            accountType?: string;
    42
            active?: boolean;
    43
            avatarUrls?: {
    44
              "16x16"?: string;
    45
              "24x24"?: string;
    46
              "32x32"?: string;
    47
              "48x48"?: string;
    48
            };
    49
            displayName?: string;
    50
            emailAddress?: string;
    51
            key?: string;
    52
            name?: string;
    53
            self?: string;
    54
            timeZone?: string;
    55
          };
    56
          updated?: string;
    57
          visibility?: {
    58
            identifier?: string;
    59
            type?: "group" | "role";
    60
            value?: string;
    61
            [k: string]: unknown;
    62
          };
    63
          [k: string]: unknown;
    64
        };
    65
        inwardIssue: {
    66
          fields?: {
    67
            assignee?: {
    68
              accountId?: string;
    69
              accountType?: string;
    70
              active?: boolean;
    71
              avatarUrls?: {
    72
                "16x16"?: string;
    73
                "24x24"?: string;
    74
                "32x32"?: string;
    75
                "48x48"?: string;
    76
              };
    77
              displayName?: string;
    78
              emailAddress?: string;
    79
              key?: string;
    80
              name?: string;
    81
              self?: string;
    82
              timeZone?: string;
    83
            };
    84
            issueType?: {
    85
              avatarId?: number;
    86
              description?: string;
    87
              entityId?: string;
    88
              hierarchyLevel?: number;
    89
              iconUrl?: string;
    90
              id?: string;
    91
              name?: string;
    92
              scope?: {
    93
                project?: {
    94
                  avatarUrls?: {
    95
                    "16x16"?: string;
    96
                    "24x24"?: string;
    97
                    "32x32"?: string;
    98
                    "48x48"?: string;
    99
                  };
    100
                  id?: string;
    101
                  key?: string;
    102
                  name?: string;
    103
                  projectCategory?: {
    104
                    description?: string;
    105
                    id?: string;
    106
                    name?: string;
    107
                    self?: string;
    108
                  };
    109
                  projectTypeKey?: "software" | "service_desk" | "business";
    110
                  self?: string;
    111
                  simplified?: boolean;
    112
                };
    113
                type?: "PROJECT" | "TEMPLATE";
    114
                [k: string]: unknown;
    115
              };
    116
              self?: string;
    117
              subtask?: boolean;
    118
            };
    119
            issuetype?: {
    120
              avatarId?: number;
    121
              description?: string;
    122
              entityId?: string;
    123
              hierarchyLevel?: number;
    124
              iconUrl?: string;
    125
              id?: string;
    126
              name?: string;
    127
              scope?: {
    128
                project?: {
    129
                  avatarUrls?: {
    130
                    "16x16"?: string;
    131
                    "24x24"?: string;
    132
                    "32x32"?: string;
    133
                    "48x48"?: string;
    134
                  };
    135
                  id?: string;
    136
                  key?: string;
    137
                  name?: string;
    138
                  projectCategory?: {
    139
                    description?: string;
    140
                    id?: string;
    141
                    name?: string;
    142
                    self?: string;
    143
                  };
    144
                  projectTypeKey?: "software" | "service_desk" | "business";
    145
                  self?: string;
    146
                  simplified?: boolean;
    147
                };
    148
                type?: "PROJECT" | "TEMPLATE";
    149
                [k: string]: unknown;
    150
              };
    151
              self?: string;
    152
              subtask?: boolean;
    153
            };
    154
            priority?: {
    155
              description?: string;
    156
              iconUrl?: string;
    157
              id?: string;
    158
              isDefault?: boolean;
    159
              name?: string;
    160
              self?: string;
    161
              statusColor?: string;
    162
              [k: string]: unknown;
    163
            };
    164
            status?: {
    165
              description?: string;
    166
              iconUrl?: string;
    167
              id?: string;
    168
              name?: string;
    169
              self?: string;
    170
              statusCategory?: {
    171
                colorName?: string;
    172
                id?: number;
    173
                key?: string;
    174
                name?: string;
    175
                self?: string;
    176
                [k: string]: unknown;
    177
              };
    178
              [k: string]: unknown;
    179
            };
    180
            summary?: string;
    181
            timetracking?: {
    182
              originalEstimate?: string;
    183
              originalEstimateSeconds?: number;
    184
              remainingEstimate?: string;
    185
              remainingEstimateSeconds?: number;
    186
              timeSpent?: string;
    187
              timeSpentSeconds?: number;
    188
            };
    189
          };
    190
          id?: string;
    191
          key?: string;
    192
          self?: string;
    193
        };
    194
        outwardIssue: {
    195
          fields?: {
    196
            assignee?: {
    197
              accountId?: string;
    198
              accountType?: string;
    199
              active?: boolean;
    200
              avatarUrls?: {
    201
                "16x16"?: string;
    202
                "24x24"?: string;
    203
                "32x32"?: string;
    204
                "48x48"?: string;
    205
              };
    206
              displayName?: string;
    207
              emailAddress?: string;
    208
              key?: string;
    209
              name?: string;
    210
              self?: string;
    211
              timeZone?: string;
    212
            };
    213
            issueType?: {
    214
              avatarId?: number;
    215
              description?: string;
    216
              entityId?: string;
    217
              hierarchyLevel?: number;
    218
              iconUrl?: string;
    219
              id?: string;
    220
              name?: string;
    221
              scope?: {
    222
                project?: {
    223
                  avatarUrls?: {
    224
                    "16x16"?: string;
    225
                    "24x24"?: string;
    226
                    "32x32"?: string;
    227
                    "48x48"?: string;
    228
                  };
    229
                  id?: string;
    230
                  key?: string;
    231
                  name?: string;
    232
                  projectCategory?: {
    233
                    description?: string;
    234
                    id?: string;
    235
                    name?: string;
    236
                    self?: string;
    237
                  };
    238
                  projectTypeKey?: "software" | "service_desk" | "business";
    239
                  self?: string;
    240
                  simplified?: boolean;
    241
                };
    242
                type?: "PROJECT" | "TEMPLATE";
    243
                [k: string]: unknown;
    244
              };
    245
              self?: string;
    246
              subtask?: boolean;
    247
            };
    248
            issuetype?: {
    249
              avatarId?: number;
    250
              description?: string;
    251
              entityId?: string;
    252
              hierarchyLevel?: number;
    253
              iconUrl?: string;
    254
              id?: string;
    255
              name?: string;
    256
              scope?: {
    257
                project?: {
    258
                  avatarUrls?: {
    259
                    "16x16"?: string;
    260
                    "24x24"?: string;
    261
                    "32x32"?: string;
    262
                    "48x48"?: string;
    263
                  };
    264
                  id?: string;
    265
                  key?: string;
    266
                  name?: string;
    267
                  projectCategory?: {
    268
                    description?: string;
    269
                    id?: string;
    270
                    name?: string;
    271
                    self?: string;
    272
                  };
    273
                  projectTypeKey?: "software" | "service_desk" | "business";
    274
                  self?: string;
    275
                  simplified?: boolean;
    276
                };
    277
                type?: "PROJECT" | "TEMPLATE";
    278
                [k: string]: unknown;
    279
              };
    280
              self?: string;
    281
              subtask?: boolean;
    282
            };
    283
            priority?: {
    284
              description?: string;
    285
              iconUrl?: string;
    286
              id?: string;
    287
              isDefault?: boolean;
    288
              name?: string;
    289
              self?: string;
    290
              statusColor?: string;
    291
              [k: string]: unknown;
    292
            };
    293
            status?: {
    294
              description?: string;
    295
              iconUrl?: string;
    296
              id?: string;
    297
              name?: string;
    298
              self?: string;
    299
              statusCategory?: {
    300
                colorName?: string;
    301
                id?: number;
    302
                key?: string;
    303
                name?: string;
    304
                self?: string;
    305
                [k: string]: unknown;
    306
              };
    307
              [k: string]: unknown;
    308
            };
    309
            summary?: string;
    310
            timetracking?: {
    311
              originalEstimate?: string;
    312
              originalEstimateSeconds?: number;
    313
              remainingEstimate?: string;
    314
              remainingEstimateSeconds?: number;
    315
              timeSpent?: string;
    316
              timeSpentSeconds?: number;
    317
            };
    318
          };
    319
          id?: string;
    320
          key?: string;
    321
          self?: string;
    322
        };
    323
        type: {
    324
          id?: string;
    325
          inward?: string;
    326
          name?: string;
    327
          outward?: string;
    328
          self?: string;
    329
        };
    330
      }
    331
    ) {
    332
      const url = new URL(
    333
        `https://${auth.domain}.atlassian.net/rest/api/2/issueLink`
    334
      );
    335
    
    
    336
      const response = await fetch(url, {
    337
        method: "POST",
    338
        headers: {
    339
          "Content-Type": "application/json",
    340
          Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
    341
        },
    342
        body: JSON.stringify(body),
    343
      });
    344
      if (!response.ok) {
    345
        const text = await response.text();
    346
        throw new Error(`${response.status} ${text}`);
    347
      }
    348
      return await response.json();
    349
    }
    350