@apiclient.xyz/gitlab 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist_ts/gitlab.classes.branch.d.ts +7 -0
  2. package/dist_ts/gitlab.classes.branch.js +13 -0
  3. package/dist_ts/gitlab.classes.gitlabclient.d.ts +112 -81
  4. package/dist_ts/gitlab.classes.gitlabclient.js +236 -156
  5. package/dist_ts/gitlab.classes.group.d.ts +47 -0
  6. package/dist_ts/gitlab.classes.group.js +97 -0
  7. package/dist_ts/gitlab.classes.job.d.ts +29 -0
  8. package/dist_ts/gitlab.classes.job.js +74 -0
  9. package/dist_ts/gitlab.classes.pipeline.d.ts +32 -0
  10. package/dist_ts/gitlab.classes.pipeline.js +87 -0
  11. package/dist_ts/gitlab.classes.project.d.ts +63 -0
  12. package/dist_ts/gitlab.classes.project.js +122 -0
  13. package/dist_ts/gitlab.classes.protectedbranch.d.ts +8 -0
  14. package/dist_ts/gitlab.classes.protectedbranch.js +15 -0
  15. package/dist_ts/gitlab.classes.tag.d.ts +7 -0
  16. package/dist_ts/gitlab.classes.tag.js +13 -0
  17. package/dist_ts/gitlab.classes.testreport.d.ts +34 -0
  18. package/dist_ts/gitlab.classes.testreport.js +67 -0
  19. package/dist_ts/gitlab.classes.variable.d.ts +18 -0
  20. package/dist_ts/gitlab.classes.variable.js +35 -0
  21. package/dist_ts/gitlab.helpers.d.ts +8 -0
  22. package/dist_ts/gitlab.helpers.js +23 -0
  23. package/dist_ts/index.d.ts +10 -0
  24. package/dist_ts/index.js +15 -1
  25. package/package.json +1 -1
  26. package/readme.md +468 -163
  27. package/ts/gitlab.classes.branch.ts +18 -0
  28. package/ts/gitlab.classes.gitlabclient.ts +297 -196
  29. package/ts/gitlab.classes.group.ts +137 -0
  30. package/ts/gitlab.classes.job.ts +104 -0
  31. package/ts/gitlab.classes.pipeline.ts +122 -0
  32. package/ts/gitlab.classes.project.ts +177 -0
  33. package/ts/gitlab.classes.protectedbranch.ts +21 -0
  34. package/ts/gitlab.classes.tag.ts +18 -0
  35. package/ts/gitlab.classes.testreport.ts +97 -0
  36. package/ts/gitlab.classes.variable.ts +50 -0
  37. package/ts/gitlab.helpers.ts +26 -0
  38. package/ts/index.ts +19 -0
@@ -1,14 +1,17 @@
1
1
  import * as plugins from './gitlab.plugins.js';
2
- import { logger } from './gitlab.logging.js';
2
+ import { GitLabGroup } from './gitlab.classes.group.js';
3
+ import { GitLabProject } from './gitlab.classes.project.js';
4
+ import { GitLabPipeline } from './gitlab.classes.pipeline.js';
5
+ import { autoPaginate } from './gitlab.helpers.js';
3
6
  export class GitLabClient {
4
7
  constructor(baseUrl, token) {
5
- // Remove trailing slash if present
6
8
  this.baseUrl = baseUrl.replace(/\/+$/, '');
7
9
  this.token = token;
8
10
  }
9
- // ---------------------------------------------------------------------------
10
- // HTTP helpers
11
- // ---------------------------------------------------------------------------
11
+ // ===========================================================================
12
+ // HTTP helpers (internal)
13
+ // ===========================================================================
14
+ /** @internal */
12
15
  async request(method, path, data, customHeaders) {
13
16
  const url = `${this.baseUrl}${path}`;
14
17
  let builder = plugins.smartrequest.SmartRequest.create()
@@ -49,6 +52,7 @@ export class GitLabClient {
49
52
  return undefined;
50
53
  }
51
54
  }
55
+ /** @internal */
52
56
  async requestText(method, path) {
53
57
  const url = `${this.baseUrl}${path}`;
54
58
  let builder = plugins.smartrequest.SmartRequest.create()
@@ -76,9 +80,40 @@ export class GitLabClient {
76
80
  }
77
81
  return response.text();
78
82
  }
79
- // ---------------------------------------------------------------------------
80
- // Connection
81
- // ---------------------------------------------------------------------------
83
+ /** @internal — multipart form upload (for avatars) */
84
+ async requestMultipart(method, path, formData) {
85
+ const url = `${this.baseUrl}${path}`;
86
+ const response = await fetch(url, {
87
+ method,
88
+ headers: { 'PRIVATE-TOKEN': this.token },
89
+ body: formData,
90
+ });
91
+ if (!response.ok) {
92
+ const errorText = await response.text();
93
+ throw new Error(`${method} ${path}: ${response.status} ${response.statusText} - ${errorText}`);
94
+ }
95
+ try {
96
+ return await response.json();
97
+ }
98
+ catch {
99
+ return undefined;
100
+ }
101
+ }
102
+ /** @internal — fetch binary data (e.g. avatar images) */
103
+ async requestBinary(url) {
104
+ const fullUrl = url.startsWith('http') ? url : `${this.baseUrl}${url}`;
105
+ const response = await fetch(fullUrl, {
106
+ headers: { 'PRIVATE-TOKEN': this.token },
107
+ });
108
+ if (!response.ok) {
109
+ throw new Error(`GET ${url}: ${response.status} ${response.statusText}`);
110
+ }
111
+ const buf = await response.arrayBuffer();
112
+ return new Uint8Array(buf);
113
+ }
114
+ // ===========================================================================
115
+ // Public API — Connection
116
+ // ===========================================================================
82
117
  async testConnection() {
83
118
  try {
84
119
  await this.request('GET', '/api/v4/user');
@@ -88,19 +123,72 @@ export class GitLabClient {
88
123
  return { ok: false, error: err instanceof Error ? err.message : String(err) };
89
124
  }
90
125
  }
91
- // ---------------------------------------------------------------------------
92
- // Groupsscoped queries
93
- // ---------------------------------------------------------------------------
126
+ // ===========================================================================
127
+ // Public API Groups (returns rich objects)
128
+ // ===========================================================================
94
129
  /**
95
- * Get a single group by its full path (e.g. "foss.global" or "foss.global/push.rocks")
130
+ * Get all groups (auto-paginated).
96
131
  */
97
- async getGroupByPath(fullPath) {
98
- return this.request('GET', `/api/v4/groups/${encodeURIComponent(fullPath)}`);
132
+ async getGroups(opts) {
133
+ return autoPaginate((page, perPage) => this.requestGetGroups({ ...opts, page, perPage }), opts).then(groups => groups.map(g => new GitLabGroup(this, g)));
134
+ }
135
+ /**
136
+ * Get a single group by full path.
137
+ */
138
+ async getGroup(fullPath) {
139
+ const raw = await this.requestGetGroupByPath(fullPath);
140
+ return new GitLabGroup(this, raw);
141
+ }
142
+ /**
143
+ * Create a new group.
144
+ */
145
+ async createGroup(name, path, parentId) {
146
+ const raw = await this.requestCreateGroup(name, path, parentId);
147
+ return new GitLabGroup(this, raw);
99
148
  }
149
+ // ===========================================================================
150
+ // Public API — Projects (returns rich objects)
151
+ // ===========================================================================
100
152
  /**
101
- * List projects within a group (includes subgroups when include_subgroups=true)
153
+ * Get all projects (auto-paginated, membership=true).
102
154
  */
103
- async getGroupProjects(groupId, opts) {
155
+ async getProjects(opts) {
156
+ return autoPaginate((page, perPage) => this.requestGetProjects({ ...opts, page, perPage }), opts).then(projects => projects.map(p => new GitLabProject(this, p)));
157
+ }
158
+ /**
159
+ * Get a single project by ID or path.
160
+ */
161
+ async getProject(idOrPath) {
162
+ const raw = await this.requestGetProject(idOrPath);
163
+ return new GitLabProject(this, raw);
164
+ }
165
+ /**
166
+ * Create a new project.
167
+ */
168
+ async createProject(name, opts) {
169
+ const raw = await this.requestCreateProject(name, opts);
170
+ return new GitLabProject(this, raw);
171
+ }
172
+ // ===========================================================================
173
+ // Internal request methods — called by domain classes
174
+ // ===========================================================================
175
+ // --- Groups ---
176
+ /** @internal */
177
+ async requestGetGroups(opts) {
178
+ const page = opts?.page || 1;
179
+ const perPage = opts?.perPage || 50;
180
+ let url = `/api/v4/groups?order_by=name&sort=asc&page=${page}&per_page=${perPage}`;
181
+ if (opts?.search) {
182
+ url += `&search=${encodeURIComponent(opts.search)}`;
183
+ }
184
+ return this.request('GET', url);
185
+ }
186
+ /** @internal */
187
+ async requestGetGroupByPath(fullPath) {
188
+ return this.request('GET', `/api/v4/groups/${encodeURIComponent(fullPath)}`);
189
+ }
190
+ /** @internal */
191
+ async requestGetGroupProjects(groupId, opts) {
104
192
  const page = opts?.page || 1;
105
193
  const perPage = opts?.perPage || 50;
106
194
  let url = `/api/v4/groups/${encodeURIComponent(groupId)}/projects?include_subgroups=true&order_by=updated_at&sort=desc&page=${page}&per_page=${perPage}`;
@@ -109,10 +197,8 @@ export class GitLabClient {
109
197
  }
110
198
  return this.request('GET', url);
111
199
  }
112
- /**
113
- * List all descendant groups (recursive subgroups) within a group
114
- */
115
- async getDescendantGroups(groupId, opts) {
200
+ /** @internal */
201
+ async requestGetDescendantGroups(groupId, opts) {
116
202
  const page = opts?.page || 1;
117
203
  const perPage = opts?.perPage || 50;
118
204
  let url = `/api/v4/groups/${encodeURIComponent(groupId)}/descendant_groups?order_by=name&sort=asc&page=${page}&per_page=${perPage}`;
@@ -121,19 +207,51 @@ export class GitLabClient {
121
207
  }
122
208
  return this.request('GET', url);
123
209
  }
124
- /**
125
- * Create a new group. Optionally nested under a parent group.
126
- */
127
- async createGroup(name, path, parentId) {
210
+ /** @internal */
211
+ async requestCreateGroup(name, path, parentId) {
128
212
  const body = { name, path, visibility: 'private' };
129
213
  if (parentId)
130
214
  body.parent_id = parentId;
131
215
  return this.request('POST', '/api/v4/groups', body);
132
216
  }
133
- /**
134
- * Create a new project (repository).
135
- */
136
- async createProject(name, opts) {
217
+ /** @internal */
218
+ async requestUpdateGroup(groupId, data) {
219
+ await this.request('PUT', `/api/v4/groups/${encodeURIComponent(groupId)}`, data);
220
+ }
221
+ /** @internal */
222
+ async requestSetGroupAvatar(groupId, imageData, filename) {
223
+ const blob = new Blob([imageData.buffer]);
224
+ const formData = new FormData();
225
+ formData.append('avatar', blob, filename);
226
+ await this.requestMultipart('PUT', `/api/v4/groups/${encodeURIComponent(groupId)}`, formData);
227
+ }
228
+ /** @internal */
229
+ async requestTransferGroup(groupId, parentGroupId) {
230
+ await this.request('POST', `/api/v4/groups/${encodeURIComponent(groupId)}/transfer`, {
231
+ group_id: parentGroupId,
232
+ });
233
+ }
234
+ /** @internal */
235
+ async requestDeleteGroup(groupId) {
236
+ await this.request('DELETE', `/api/v4/groups/${encodeURIComponent(groupId)}`);
237
+ }
238
+ // --- Projects ---
239
+ /** @internal */
240
+ async requestGetProjects(opts) {
241
+ const page = opts?.page || 1;
242
+ const perPage = opts?.perPage || 50;
243
+ let url = `/api/v4/projects?membership=true&order_by=updated_at&sort=desc&page=${page}&per_page=${perPage}`;
244
+ if (opts?.search) {
245
+ url += `&search=${encodeURIComponent(opts.search)}`;
246
+ }
247
+ return this.request('GET', url);
248
+ }
249
+ /** @internal */
250
+ async requestGetProject(idOrPath) {
251
+ return this.request('GET', `/api/v4/projects/${encodeURIComponent(idOrPath)}`);
252
+ }
253
+ /** @internal */
254
+ async requestCreateProject(name, opts) {
137
255
  return this.request('POST', '/api/v4/projects', {
138
256
  name,
139
257
  path: opts?.path || name,
@@ -142,37 +260,56 @@ export class GitLabClient {
142
260
  description: opts?.description || '',
143
261
  });
144
262
  }
145
- // ---------------------------------------------------------------------------
146
- // Projects
147
- // ---------------------------------------------------------------------------
148
- async getProjects(opts) {
263
+ /** @internal */
264
+ async requestUpdateProject(projectId, data) {
265
+ await this.request('PUT', `/api/v4/projects/${encodeURIComponent(projectId)}`, data);
266
+ }
267
+ /** @internal */
268
+ async requestSetProjectAvatar(projectId, imageData, filename) {
269
+ const blob = new Blob([imageData.buffer]);
270
+ const formData = new FormData();
271
+ formData.append('avatar', blob, filename);
272
+ await this.requestMultipart('PUT', `/api/v4/projects/${encodeURIComponent(projectId)}`, formData);
273
+ }
274
+ /** @internal */
275
+ async requestTransferProject(projectId, namespaceId) {
276
+ await this.request('PUT', `/api/v4/projects/${encodeURIComponent(projectId)}/transfer`, {
277
+ namespace: namespaceId,
278
+ });
279
+ }
280
+ /** @internal */
281
+ async requestDeleteProject(projectId) {
282
+ await this.request('DELETE', `/api/v4/projects/${encodeURIComponent(projectId)}`);
283
+ }
284
+ // --- Repo Branches & Tags ---
285
+ /** @internal */
286
+ async requestGetRepoBranches(projectId, opts) {
149
287
  const page = opts?.page || 1;
150
288
  const perPage = opts?.perPage || 50;
151
- let url = `/api/v4/projects?membership=true&order_by=updated_at&sort=desc&page=${page}&per_page=${perPage}`;
152
- if (opts?.search) {
153
- url += `&search=${encodeURIComponent(opts.search)}`;
154
- }
155
- return this.request('GET', url);
289
+ return this.request('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/repository/branches?page=${page}&per_page=${perPage}`);
156
290
  }
157
- // ---------------------------------------------------------------------------
158
- // Groups
159
- // ---------------------------------------------------------------------------
160
- async getGroups(opts) {
291
+ /** @internal */
292
+ async requestGetRepoTags(projectId, opts) {
161
293
  const page = opts?.page || 1;
162
294
  const perPage = opts?.perPage || 50;
163
- let url = `/api/v4/groups?order_by=name&sort=asc&page=${page}&per_page=${perPage}`;
164
- if (opts?.search) {
165
- url += `&search=${encodeURIComponent(opts.search)}`;
166
- }
167
- return this.request('GET', url);
295
+ return this.request('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/repository/tags?page=${page}&per_page=${perPage}`);
296
+ }
297
+ // --- Protected Branches ---
298
+ /** @internal */
299
+ async requestGetProtectedBranches(projectId) {
300
+ return this.request('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/protected_branches`);
301
+ }
302
+ /** @internal */
303
+ async requestUnprotectBranch(projectId, branchName) {
304
+ await this.request('DELETE', `/api/v4/projects/${encodeURIComponent(projectId)}/protected_branches/${encodeURIComponent(branchName)}`);
168
305
  }
169
- // ---------------------------------------------------------------------------
170
- // Project Variables (CI/CD)
171
- // ---------------------------------------------------------------------------
172
- async getProjectVariables(projectId) {
306
+ // --- Project Variables ---
307
+ /** @internal */
308
+ async requestGetProjectVariables(projectId) {
173
309
  return this.request('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/variables`);
174
310
  }
175
- async createProjectVariable(projectId, key, value, opts) {
311
+ /** @internal */
312
+ async requestCreateProjectVariable(projectId, key, value, opts) {
176
313
  return this.request('POST', `/api/v4/projects/${encodeURIComponent(projectId)}/variables`, {
177
314
  key,
178
315
  value,
@@ -181,7 +318,8 @@ export class GitLabClient {
181
318
  environment_scope: opts?.environment_scope ?? '*',
182
319
  });
183
320
  }
184
- async updateProjectVariable(projectId, key, value, opts) {
321
+ /** @internal */
322
+ async requestUpdateProjectVariable(projectId, key, value, opts) {
185
323
  const body = { value };
186
324
  if (opts?.protected !== undefined)
187
325
  body.protected = opts.protected;
@@ -191,16 +329,17 @@ export class GitLabClient {
191
329
  body.environment_scope = opts.environment_scope;
192
330
  return this.request('PUT', `/api/v4/projects/${encodeURIComponent(projectId)}/variables/${encodeURIComponent(key)}`, body);
193
331
  }
194
- async deleteProjectVariable(projectId, key) {
332
+ /** @internal */
333
+ async requestDeleteProjectVariable(projectId, key) {
195
334
  await this.request('DELETE', `/api/v4/projects/${encodeURIComponent(projectId)}/variables/${encodeURIComponent(key)}`);
196
335
  }
197
- // ---------------------------------------------------------------------------
198
- // Group Variables (CI/CD)
199
- // ---------------------------------------------------------------------------
200
- async getGroupVariables(groupId) {
336
+ // --- Group Variables ---
337
+ /** @internal */
338
+ async requestGetGroupVariables(groupId) {
201
339
  return this.request('GET', `/api/v4/groups/${encodeURIComponent(groupId)}/variables`);
202
340
  }
203
- async createGroupVariable(groupId, key, value, opts) {
341
+ /** @internal */
342
+ async requestCreateGroupVariable(groupId, key, value, opts) {
204
343
  return this.request('POST', `/api/v4/groups/${encodeURIComponent(groupId)}/variables`, {
205
344
  key,
206
345
  value,
@@ -209,7 +348,8 @@ export class GitLabClient {
209
348
  environment_scope: opts?.environment_scope ?? '*',
210
349
  });
211
350
  }
212
- async updateGroupVariable(groupId, key, value, opts) {
351
+ /** @internal */
352
+ async requestUpdateGroupVariable(groupId, key, value, opts) {
213
353
  const body = { value };
214
354
  if (opts?.protected !== undefined)
215
355
  body.protected = opts.protected;
@@ -219,17 +359,13 @@ export class GitLabClient {
219
359
  body.environment_scope = opts.environment_scope;
220
360
  return this.request('PUT', `/api/v4/groups/${encodeURIComponent(groupId)}/variables/${encodeURIComponent(key)}`, body);
221
361
  }
222
- async deleteGroupVariable(groupId, key) {
362
+ /** @internal */
363
+ async requestDeleteGroupVariable(groupId, key) {
223
364
  await this.request('DELETE', `/api/v4/groups/${encodeURIComponent(groupId)}/variables/${encodeURIComponent(key)}`);
224
365
  }
225
- // ---------------------------------------------------------------------------
226
- // Pipelines
227
- // ---------------------------------------------------------------------------
228
- /**
229
- * List pipelines for a project with optional filters.
230
- * Supports status, ref, source, scope, username, date range, ordering.
231
- */
232
- async getPipelines(projectId, opts) {
366
+ // --- Pipelines ---
367
+ /** @internal */
368
+ async requestGetPipelines(projectId, opts) {
233
369
  const page = opts?.page || 1;
234
370
  const perPage = opts?.perPage || 30;
235
371
  const orderBy = opts?.orderBy || 'updated_at';
@@ -251,53 +387,41 @@ export class GitLabClient {
251
387
  url += `&updated_before=${encodeURIComponent(opts.updatedBefore)}`;
252
388
  return this.request('GET', url);
253
389
  }
254
- /**
255
- * Get a single pipeline's full details.
256
- */
257
- async getPipeline(projectId, pipelineId) {
390
+ /** @internal */
391
+ async requestGetPipeline(projectId, pipelineId) {
258
392
  return this.request('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/pipelines/${pipelineId}`);
259
393
  }
260
- /**
261
- * Trigger a new pipeline on the given ref, optionally with variables.
262
- */
263
- async triggerPipeline(projectId, ref, variables) {
394
+ /** @internal */
395
+ async requestTriggerPipeline(projectId, ref, variables) {
264
396
  const body = { ref };
265
397
  if (variables && variables.length > 0) {
266
398
  body.variables = variables;
267
399
  }
268
400
  return this.request('POST', `/api/v4/projects/${encodeURIComponent(projectId)}/pipeline`, body);
269
401
  }
270
- /**
271
- * Delete a pipeline and all its jobs.
272
- */
273
- async deletePipeline(projectId, pipelineId) {
402
+ /** @internal */
403
+ async requestRetryPipeline(projectId, pipelineId) {
404
+ return this.request('POST', `/api/v4/projects/${encodeURIComponent(projectId)}/pipelines/${pipelineId}/retry`);
405
+ }
406
+ /** @internal */
407
+ async requestCancelPipeline(projectId, pipelineId) {
408
+ return this.request('POST', `/api/v4/projects/${encodeURIComponent(projectId)}/pipelines/${pipelineId}/cancel`);
409
+ }
410
+ /** @internal */
411
+ async requestDeletePipeline(projectId, pipelineId) {
274
412
  await this.request('DELETE', `/api/v4/projects/${encodeURIComponent(projectId)}/pipelines/${pipelineId}`);
275
413
  }
276
- /**
277
- * Get variables used in a specific pipeline run.
278
- */
279
- async getPipelineVariables(projectId, pipelineId) {
414
+ /** @internal */
415
+ async requestGetPipelineVariables(projectId, pipelineId) {
280
416
  return this.request('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/pipelines/${pipelineId}/variables`);
281
417
  }
282
- /**
283
- * Get the test report for a pipeline.
284
- */
285
- async getPipelineTestReport(projectId, pipelineId) {
418
+ /** @internal */
419
+ async requestGetPipelineTestReport(projectId, pipelineId) {
286
420
  return this.request('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/pipelines/${pipelineId}/test_report`);
287
421
  }
288
- async retryPipeline(projectId, pipelineId) {
289
- return this.request('POST', `/api/v4/projects/${encodeURIComponent(projectId)}/pipelines/${pipelineId}/retry`);
290
- }
291
- async cancelPipeline(projectId, pipelineId) {
292
- return this.request('POST', `/api/v4/projects/${encodeURIComponent(projectId)}/pipelines/${pipelineId}/cancel`);
293
- }
294
- // ---------------------------------------------------------------------------
295
- // Jobs
296
- // ---------------------------------------------------------------------------
297
- /**
298
- * List jobs for a pipeline with optional scope filter and pagination.
299
- */
300
- async getPipelineJobs(projectId, pipelineId, opts) {
422
+ // --- Jobs ---
423
+ /** @internal */
424
+ async requestGetPipelineJobs(projectId, pipelineId, opts) {
301
425
  const page = opts?.page || 1;
302
426
  const perPage = opts?.perPage || 100;
303
427
  let url = `/api/v4/projects/${encodeURIComponent(projectId)}/pipelines/${pipelineId}/jobs?page=${page}&per_page=${perPage}`;
@@ -308,69 +432,25 @@ export class GitLabClient {
308
432
  }
309
433
  return this.request('GET', url);
310
434
  }
311
- /**
312
- * Get a single job's full details.
313
- */
314
- async getJob(projectId, jobId) {
315
- return this.request('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/jobs/${jobId}`);
316
- }
317
- /**
318
- * Get a job's raw log (trace) output.
319
- */
320
- async getJobLog(projectId, jobId) {
435
+ /** @internal */
436
+ async requestGetJobLog(projectId, jobId) {
321
437
  return this.requestText('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/jobs/${jobId}/trace`);
322
438
  }
323
- /**
324
- * Retry a single job.
325
- */
326
- async retryJob(projectId, jobId) {
439
+ /** @internal */
440
+ async requestRetryJob(projectId, jobId) {
327
441
  return this.request('POST', `/api/v4/projects/${encodeURIComponent(projectId)}/jobs/${jobId}/retry`);
328
442
  }
329
- /**
330
- * Cancel a running job.
331
- */
332
- async cancelJob(projectId, jobId) {
443
+ /** @internal */
444
+ async requestCancelJob(projectId, jobId) {
333
445
  return this.request('POST', `/api/v4/projects/${encodeURIComponent(projectId)}/jobs/${jobId}/cancel`);
334
446
  }
335
- /**
336
- * Trigger a manual job (play action).
337
- */
338
- async playJob(projectId, jobId) {
447
+ /** @internal */
448
+ async requestPlayJob(projectId, jobId) {
339
449
  return this.request('POST', `/api/v4/projects/${encodeURIComponent(projectId)}/jobs/${jobId}/play`);
340
450
  }
341
- /**
342
- * Erase a job's trace and artifacts.
343
- */
344
- async eraseJob(projectId, jobId) {
451
+ /** @internal */
452
+ async requestEraseJob(projectId, jobId) {
345
453
  await this.request('POST', `/api/v4/projects/${encodeURIComponent(projectId)}/jobs/${jobId}/erase`);
346
454
  }
347
- // ---------------------------------------------------------------------------
348
- // Repository Branches & Tags
349
- // ---------------------------------------------------------------------------
350
- async getRepoBranches(projectId, opts) {
351
- const page = opts?.page || 1;
352
- const perPage = opts?.perPage || 50;
353
- return this.request('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/repository/branches?page=${page}&per_page=${perPage}`);
354
- }
355
- async getRepoTags(projectId, opts) {
356
- const page = opts?.page || 1;
357
- const perPage = opts?.perPage || 50;
358
- return this.request('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/repository/tags?page=${page}&per_page=${perPage}`);
359
- }
360
- // ---------------------------------------------------------------------------
361
- // Protected Branches
362
- // ---------------------------------------------------------------------------
363
- async getProtectedBranches(projectId) {
364
- return this.request('GET', `/api/v4/projects/${encodeURIComponent(projectId)}/protected_branches`);
365
- }
366
- async unprotectBranch(projectId, branchName) {
367
- await this.request('DELETE', `/api/v4/projects/${encodeURIComponent(projectId)}/protected_branches/${encodeURIComponent(branchName)}`);
368
- }
369
- // ---------------------------------------------------------------------------
370
- // Project Deletion
371
- // ---------------------------------------------------------------------------
372
- async deleteProject(projectId) {
373
- await this.request('DELETE', `/api/v4/projects/${encodeURIComponent(projectId)}`);
374
- }
375
455
  }
376
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0bGFiLmNsYXNzZXMuZ2l0bGFiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvZ2l0bGFiLmNsYXNzZXMuZ2l0bGFiY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBb0I3QyxNQUFNLE9BQU8sWUFBWTtJQUl2QixZQUFZLE9BQWUsRUFBRSxLQUFhO1FBQ3hDLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsZUFBZTtJQUNmLDhFQUE4RTtJQUV0RSxLQUFLLENBQUMsT0FBTyxDQUNuQixNQUF5QyxFQUN6QyxJQUFZLEVBQ1osSUFBVSxFQUNWLGFBQXNDO1FBRXRDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUVyQyxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7YUFDckQsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUNSLE1BQU0sQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUNuQyxNQUFNLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFOUMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FB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
456
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0bGFiLmNsYXNzZXMuZ2l0bGFiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvZ2l0bGFiLmNsYXNzZXMuZ2l0bGFiY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFtQi9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRCxNQUFNLE9BQU8sWUFBWTtJQUl2QixZQUFZLE9BQWUsRUFBRSxLQUFhO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSwwQkFBMEI7SUFDMUIsOEVBQThFO0lBRTlFLGdCQUFnQjtJQUNoQixLQUFLLENBQUMsT0FBTyxDQUNYLE1BQXlDLEVBQ3pDLElBQVksRUFDWixJQUFVLEVBQ1YsYUFBc0M7UUFFdEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDO1FBRXJDLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTthQUNyRCxHQUFHLENBQUMsR0FBRyxDQUFDO2FBQ1IsTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ25DLE1BQU0sQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUU5QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xC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