From e4bb95cdb36d74f9765e762642afa7083cf17f8b Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Sun, 16 Nov 2025 14:50:41 -0500 Subject: [PATCH] Saving progress --- .../core/src/infrastructure/RequestHelper.ts | 39 ++++++++++++------- .../core/src/resources/AlertManagement.ts | 28 ++++++++++--- .../test/unit/resources/AlertManagement.ts | 8 ++-- 3 files changed, 53 insertions(+), 22 deletions(-) diff --git a/packages/core/src/infrastructure/RequestHelper.ts b/packages/core/src/infrastructure/RequestHelper.ts index 02f2fb64..aebc8208 100644 --- a/packages/core/src/infrastructure/RequestHelper.ts +++ b/packages/core/src/infrastructure/RequestHelper.ts @@ -27,6 +27,11 @@ export interface AsAdmin { } export type BaseRequestOptions = Sudo & + ShowExpanded & { + [key: string]: RequesterBodyType + }; + +export type RequesterBaseRequestOptions = Sudo & ShowExpanded & { body?: RequesterBodyType; searchParams?: Record; @@ -34,7 +39,7 @@ export type BaseRequestOptions = Sudo & export type PaginationTypes = 'keyset' | 'offset'; -export interface KeysetPaginationRequestSearchParams { +export interface KeysetPaginationRequestParams { pagination: 'keyset'; perPage?: number | string; orderBy: string; @@ -44,7 +49,7 @@ export interface KeysetPaginationRequestSearchParams { cursor?: string; } -export interface OffsetPaginationRequestSearchParams { +export interface OffsetPaginationRequestParams { page?: number | string; perPage?: number | string; } @@ -54,10 +59,15 @@ export interface BasePaginationRequestOptions { } export type PaginationRequestSearchParams

= P extends 'keyset' - ? KeysetPaginationRequestSearchParams - : OffsetPaginationRequestSearchParams; + ? KeysetPaginationRequestParams + : P extends 'offset' + ? OffsetPaginationRequestParams + : OffsetPaginationRequestParams; export type PaginationRequestOptions

= + BasePaginationRequestOptions & PaginationRequestSearchParams

; + +export type RequesterPaginationRequestOptions

= BasePaginationRequestOptions & { searchParams?: PaginationRequestSearchParams

; }; @@ -65,7 +75,7 @@ export type PaginationRequestOptions

= // Response Formats export type CamelizedResponse = C extends true ? Camelize : T; -export interface OffsetPagination { +export interface OffsetPaginationResponseParams { total: number; next: number | null; current: number; @@ -74,8 +84,9 @@ export interface OffsetPagination { totalPages: number; } -export interface KeysetPagination { - idAfter: number; +export interface KeysetPaginationResponseParams { + idAfter?: number; + cursor?: string; perPage: number; orderBy: string; sort: 'asc' | 'desc'; @@ -89,7 +100,7 @@ export interface ExpandedResponse { export type PaginatedResponse = { [U in P]: { - paginationInfo: P extends 'keyset' ? KeysetPagination : OffsetPagination; + paginationInfo: P extends 'keyset' ? KeysetPaginationResponseParams : OffsetPaginationResponseParams; data: T; }; }[P]; @@ -183,7 +194,7 @@ async function getManyMore< getFn: (ep: string, op: DefaultRequesterOptions) => Promise>, endpoint: string, response: FormattedResponse, - requestOptions: PaginationRequestOptions

& BaseRequestOptions, + requestOptions: RequesterPaginationRequestOptions

& RequesterBaseRequestOptions, acc?: T, ): Promise | T> { const { sudo, showExpanded, maxPages, searchParams } = requestOptions; @@ -296,7 +307,7 @@ export function get< return async ( service: BaseResource, endpoint: string, - options?: PaginationRequestOptions

& BaseRequestOptions & AsStream, + options?: RequesterPaginationRequestOptions

& RequesterBaseRequestOptions & AsStream, ): Promise => { const { asStream, sudo, showExpanded, searchParams } = options || {}; const signal = service.queryTimeout ? AbortSignal.timeout(service.queryTimeout) : undefined; @@ -334,7 +345,7 @@ export function post() { return async ( service: BaseResource, endpoint: string, - options?: BaseRequestOptions, + options?: RequesterBaseRequestOptions, ): Promise> => { const { body, searchParams, sudo, showExpanded } = options || {}; @@ -356,7 +367,7 @@ export function put() { return async ( service: BaseResource, endpoint: string, - options?: BaseRequestOptions, + options?: RequesterBaseRequestOptions, ): Promise> => { const { body, searchParams, sudo, showExpanded } = options || {}; @@ -378,7 +389,7 @@ export function patch() { return async ( service: BaseResource, endpoint: string, - options?: BaseRequestOptions, + options?: RequesterBaseRequestOptions, ): Promise> => { const { body, searchParams, sudo, showExpanded } = options || {}; @@ -400,7 +411,7 @@ export function del() { return async ( service: BaseResource, endpoint: string, - options?: BaseRequestOptions, + options?: RequesterBaseRequestOptions, ): Promise> => { const { body, searchParams, sudo, showExpanded } = options || {}; diff --git a/packages/core/src/resources/AlertManagement.ts b/packages/core/src/resources/AlertManagement.ts index 37de359f..b16874d1 100644 --- a/packages/core/src/resources/AlertManagement.ts +++ b/packages/core/src/resources/AlertManagement.ts @@ -1,5 +1,5 @@ import { BaseResource } from '@gitbeaker/requester-utils'; -import { RequestHelper, endpoint } from '../infrastructure'; +import { RequestHelper, createFormData, endpoint } from '../infrastructure'; import type { GitlabAPIResponse, PaginationRequestOptions, @@ -23,10 +23,18 @@ export class AlertManagement extends BaseResource alertIId: number, options?: PaginationRequestOptions

& Sudo & ShowExpanded, ): Promise> { + const { sudo, showExpanded, maxPages, ...qp } = options || {}; + const requestOptions = options ? { + sudo: sudo, + showExpanded: showExpanded, + maxPages: maxPages, + searchParams: qp, + } : undefined; + return RequestHelper.get()( this, endpoint`projects/${projectId}/alert_management_alerts/${alertIId}/metric_images`, - options, + requestOptions, ); } @@ -39,7 +47,14 @@ export class AlertManagement extends BaseResource return RequestHelper.put()( this, endpoint`projects/${projectId}/alert_management_alerts/${alertIId}/metric_images/${imageId}`, - options, + { + sudo: options?.sudo, + showExpanded: options?.showExpanded, + body: { + url: options?.url, + urlText: options?.urlText, + }, + }, ); } @@ -66,9 +81,12 @@ export class AlertManagement extends BaseResource this, endpoint`projects/${projectId}/alert_management_alerts/${alertIId}/metric_images`, { - isForm: true, - file: [metricImage.content, metricImage.filename], ...options, + body: createFormData({ + file: [metricImage.content, metricImage.filename], + url: options?.url, + urlText: options?.urlText, + }), }, ); } diff --git a/packages/core/test/unit/resources/AlertManagement.ts b/packages/core/test/unit/resources/AlertManagement.ts index aaae3385..80e695f3 100644 --- a/packages/core/test/unit/resources/AlertManagement.ts +++ b/packages/core/test/unit/resources/AlertManagement.ts @@ -37,7 +37,10 @@ describe('Agents.editMetricImage', () => { service, 'projects/1/alert_management_alerts/2/metric_images/3', { - url: 'url', + body: { + url: 'url', + urlText: undefined, + }, }, ); }); @@ -66,8 +69,7 @@ describe('Agents.uploadMetricImage', () => { service, 'projects/1/alert_management_alerts/2/metric_images', { - isForm: true, - file: [image.content, image.filename], + body: expect.any(FormData), urlText: 'text', }, );