mirror of
https://github.com/jdalrymple/gitbeaker.git
synced 2026-01-25 16:04:01 +00:00
74 lines
1.7 KiB
TypeScript
74 lines
1.7 KiB
TypeScript
import Ky from 'ky';
|
|
import { Agent } from 'https';
|
|
import {
|
|
Service,
|
|
DefaultRequestOptions,
|
|
createInstance,
|
|
defaultRequest as baseDefaultRequest,
|
|
} from '@gitbeaker/requester-utils';
|
|
|
|
function responseHeadersAsObject(response): Record<string, string> {
|
|
const headers = {};
|
|
const keyVals = [...response.headers.entries()];
|
|
|
|
keyVals.forEach(([key, val]) => {
|
|
headers[key] = val;
|
|
});
|
|
|
|
return headers;
|
|
}
|
|
|
|
export function defaultRequest(service: Service, options: DefaultRequestOptions = {}) {
|
|
const opts = baseDefaultRequest(service, options);
|
|
|
|
if (service.url.includes('https')) {
|
|
opts.agent = new Agent({
|
|
rejectUnauthorized: service.rejectUnauthorized,
|
|
});
|
|
}
|
|
|
|
return { ...opts, headers: new Headers(service.headers as Record<string, string>) };
|
|
}
|
|
|
|
export function processBody(response) {
|
|
const contentType = response.headers.get('content-type') || '';
|
|
|
|
switch (contentType) {
|
|
case 'application/json': {
|
|
return response.json().then((v) => v || {});
|
|
}
|
|
case 'application/octet-stream':
|
|
case 'binary/octet-stream':
|
|
case 'application/gzip': {
|
|
return response.blob().then(Buffer.from);
|
|
}
|
|
default: {
|
|
return response.text().then((t) => t || '');
|
|
}
|
|
}
|
|
}
|
|
|
|
export async function handler(endpoint, options) {
|
|
let response;
|
|
|
|
try {
|
|
response = await Ky(endpoint, options);
|
|
} catch (e) {
|
|
if (e.response) {
|
|
const output = await e.response.json();
|
|
|
|
e.description = output.error || output.message;
|
|
}
|
|
|
|
throw e;
|
|
}
|
|
|
|
const { status } = response;
|
|
const headers = responseHeadersAsObject(response);
|
|
const body = await processBody(response);
|
|
|
|
return { body, headers, status };
|
|
}
|
|
|
|
export const Requester = createInstance(defaultRequest, handler);
|