Justin Dalrymple 502d8180a7
Update service typing and peripheral endpoints (#1768)
* Dependency and Configuration updates
* CHANGELOG and README updates
* Added support for camel case and snake case response types in the request helper and base service
* Added support for the Dockerfile Templates API
* Added support for the Issue Note Award Emojis API
* Removed redundant Group Projects service
* Updated types for a variety of services
* Added type updates and removed protect and unprotect endpoints from the Branches API 
* Added type updates and signature endpoint to the Commits API
* Added type updates and edit support to the Deployments API
* Added type updates and a showRepository function to the Container Registry API
* Added type updates and updated the service support to include create, edit, show and remove for the Feature Flags API
* Added type updates and support for the removal of geonodes with the Geo Nodes API
* Renamed UserKeys to UserSSHKeys and added type updates for the User SSH Keys API
* Added type updates for the License Templates API and renamed the export to fix the spelling error
* Added type updates and support for the transfer projects endpoint for the Groups API
* Added type updates and removed removed events endpoint on the Projects API
* Added type updates and modified the create function to require a resource name in the Todos API
2021-05-14 10:07:11 -04:00

76 lines
1.9 KiB
TypeScript

import { RequesterType, DefaultServiceOptions } from './RequesterUtils';
export interface BaseServiceOptions<C> {
oauthToken?: string;
token?: string;
jobToken?: string;
host?: string;
prefixUrl?: string;
version?: 3 | 4;
rejectUnauthorized?: boolean;
camelize?: C;
requesterFn?: (serviceOptions: DefaultServiceOptions) => RequesterType;
requestTimeout?: number;
profileToken?: string;
sudo?: string | number;
profileMode?: 'execution' | 'memory';
}
export class BaseService<C extends boolean = false> {
public readonly url: string;
public readonly requester: RequesterType;
public readonly requestTimeout: number;
public readonly headers: { [header: string]: string };
public readonly camelize: C | undefined;
public readonly rejectUnauthorized: boolean;
constructor({
token,
jobToken,
oauthToken,
sudo,
profileToken,
requesterFn,
camelize,
profileMode = 'execution',
host = 'https://gitlab.com',
prefixUrl = '',
version = 4,
rejectUnauthorized = true,
requestTimeout = 300000,
}: BaseServiceOptions<C> = {}) {
if (!requesterFn) throw new ReferenceError('requesterFn must be passed');
this.url = [host, 'api', `v${version}`, prefixUrl].join('/');
this.headers = {
'user-agent': 'gitbeaker',
};
this.rejectUnauthorized = rejectUnauthorized;
this.camelize = camelize;
this.requestTimeout = requestTimeout;
// Handle auth tokens
if (oauthToken) this.headers.authorization = `Bearer ${oauthToken}`;
else if (jobToken) this.headers['job-token'] = jobToken;
else if (token) this.headers['private-token'] = token;
// Profiling
if (profileToken) {
this.headers['X-Profile-Token'] = profileToken;
this.headers['X-Profile-Mode'] = profileMode;
}
// Set sudo
if (sudo) this.headers.Sudo = `${sudo}`;
// Set requester instance using this information
this.requester = requesterFn({ ...this });
}
}