@gitbeaker/rest
Version:
Cross Platform implementation of the GitLab API
513 lines (507 loc) • 16.1 kB
JavaScript
;
var CORE = require('@gitbeaker/core');
var requesterUtils = require('@gitbeaker/requester-utils');
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var CORE__namespace = /*#__PURE__*/_interopNamespace(CORE);
// src/index.ts
async function processBody(response) {
const contentType = (response.headers.get("content-type") || "").split(";")[0].trim();
if (contentType === "application/json") {
return response.json().then((v) => v || {});
}
if (contentType.startsWith("text/")) {
return response.text().then((t) => t || "");
}
return response.blob();
}
function delay(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
async function parseResponse(response, asStream = false) {
const { status, headers: rawHeaders } = response;
const headers = Object.fromEntries(rawHeaders.entries());
let body;
if (asStream) {
body = response.body;
} else {
body = status === 204 ? null : await processBody(response);
}
return { body, headers, status };
}
async function throwFailedRequestError(request, response) {
const content = await response.text();
const contentType = response.headers.get("Content-Type");
let description;
if (contentType?.includes("application/json")) {
const output = JSON.parse(content);
const contentProperty = output?.error || output?.message || "";
description = typeof contentProperty === "string" ? contentProperty : JSON.stringify(contentProperty);
} else {
description = content;
}
throw new requesterUtils.GitbeakerRequestError(description, {
cause: {
description,
request,
response
}
});
}
function getConditionalMode(endpoint) {
if (endpoint.includes("repository/archive")) return "same-origin";
return void 0;
}
async function defaultRequestHandler(endpoint, options) {
const retryCodes = [429, 502];
const maxRetries = 10;
const { prefixUrl, asStream, searchParams, rateLimiters, method, ...opts } = options || {};
const rateLimit = requesterUtils.getMatchingRateLimiter(endpoint, rateLimiters, method);
let lastStatus;
let baseUrl;
if (prefixUrl) baseUrl = prefixUrl.endsWith("/") ? prefixUrl : `${prefixUrl}/`;
const url = new URL(endpoint, baseUrl);
url.search = searchParams || "";
const mode = getConditionalMode(endpoint);
for (let i = 0; i < maxRetries; i += 1) {
const request = new Request(url, { ...opts, method, mode });
await rateLimit();
const response = await fetch(request).catch((e) => {
if (e.name === "TimeoutError" || e.name === "AbortError") {
throw new requesterUtils.GitbeakerTimeoutError("Query timeout was reached");
}
throw e;
});
if (response.ok) return parseResponse(response, asStream);
if (!retryCodes.includes(response.status)) await throwFailedRequestError(request, response);
lastStatus = response.status;
await delay(2 ** i * 0.25);
continue;
}
throw new requesterUtils.GitbeakerRetryError(
`Could not successfully complete this request after ${maxRetries} retries, last status code: ${lastStatus}. ${lastStatus === 429 ? "Check the applicable rate limits for this endpoint" : "Verify the status of the endpoint"}.`
);
}
var requesterFn = requesterUtils.createRequesterFn(
(_, reqo) => Promise.resolve(reqo),
defaultRequestHandler
);
var { AccessLevel: AL, ...Resources } = CORE__namespace;
var API = requesterUtils.presetResourceArguments(Resources, { requesterFn });
var AccessLevel = AL;
var {
Agents,
AlertManagement,
ApplicationAppearance,
ApplicationPlanLimits,
Applications,
ApplicationSettings,
ApplicationStatistics,
AuditEvents,
Avatar,
BroadcastMessages,
CodeSuggestions,
Composer,
Conan,
DashboardAnnotations,
Debian,
DependencyProxy,
DeployKeys,
DeployTokens,
DockerfileTemplates,
Events,
Experiments,
GeoNodes,
GeoSites,
GitignoreTemplates,
GitLabCIYMLTemplates,
Import,
InstanceLevelCICDVariables,
Keys,
License,
LicenseTemplates,
Lint,
Markdown,
Maven,
Metadata,
Migrations,
Namespaces,
NotificationSettings,
NPM,
NuGet,
PersonalAccessTokens,
PyPI,
RubyGems,
Search,
SearchAdmin,
ServiceAccounts,
ServiceData,
SidekiqMetrics,
SidekiqQueues,
SnippetRepositoryStorageMoves,
Snippets,
Suggestions,
SystemHooks,
TodoLists,
Topics,
Branches,
CommitDiscussions,
Commits,
ContainerRegistry,
Deployments,
Environments,
ErrorTrackingClientKeys,
ErrorTrackingSettings,
ExternalStatusChecks,
FeatureFlags,
FeatureFlagUserLists,
FreezePeriods,
GitlabPages,
GoProxy,
Helm,
Integrations,
IssueAwardEmojis,
IssueDiscussions,
IssueIterationEvents,
IssueLabelEvents,
IssueLinks,
IssueMilestoneEvents,
IssueNoteAwardEmojis,
IssueNotes,
Issues,
IssuesStatistics,
IssueStateEvents,
IssueWeightEvents,
JobArtifacts,
Jobs,
MergeRequestApprovals,
MergeRequestAwardEmojis,
MergeRequestContextCommits,
MergeRequestDiscussions,
MergeRequestLabelEvents,
MergeRequestMilestoneEvents,
MergeRequestDraftNotes,
MergeRequestNotes,
MergeRequestNoteAwardEmojis,
MergeRequests,
MergeTrains,
PackageRegistry,
Packages,
PagesDomains,
Pipelines,
PipelineSchedules,
PipelineScheduleVariables,
PipelineTriggerTokens,
ProductAnalytics,
ProjectAccessRequests,
ProjectAccessTokens,
ProjectAliases,
ProjectBadges,
ProjectCustomAttributes,
ProjectDORA4Metrics,
ProjectHooks,
ProjectImportExports,
ProjectInvitations,
ProjectIssueBoards,
ProjectIterations,
ProjectJobTokenScopes,
ProjectLabels,
ProjectMarkdownUploads,
ProjectMembers,
ProjectMilestones,
ProjectProtectedEnvironments,
ProjectPushRules,
ProjectRelationsExport,
ProjectReleases,
ProjectRemoteMirrors,
ProjectRepositoryStorageMoves,
Projects,
ProjectSnippetAwardEmojis,
ProjectSnippetDiscussions,
ProjectSnippetNotes,
ProjectSnippets,
ProjectStatistics,
ProjectTemplates,
ProjectTerraformState,
ProjectVariables,
ProjectVulnerabilities,
ProjectWikis,
ProtectedBranches,
ProtectedTags,
ReleaseLinks,
Repositories,
RepositoryFiles,
RepositorySubmodules,
ResourceGroups,
Runners,
SecureFiles,
Tags,
UserStarredMetricsDashboard,
EpicAwardEmojis,
EpicDiscussions,
EpicIssues,
EpicLabelEvents,
EpicLinks,
EpicNotes,
Epics,
GroupAccessRequests,
GroupAccessTokens,
GroupActivityAnalytics,
GroupBadges,
GroupCustomAttributes,
GroupDORA4Metrics,
GroupEpicBoards,
GroupHooks,
GroupImportExports,
GroupInvitations,
GroupIssueBoards,
GroupIterations,
GroupLabels,
GroupLDAPLinks,
GroupMarkdownUploads,
GroupMembers,
GroupMemberRoles,
GroupMilestones,
GroupProtectedEnvironments,
GroupPushRules,
GroupRelationExports,
GroupReleases,
GroupRepositoryStorageMoves,
Groups,
GroupSAMLIdentities,
GroupSAMLLinks,
GroupSCIMIdentities,
GroupServiceAccounts,
GroupVariables,
GroupWikis,
LinkedEpics,
UserCustomAttributes,
UserEmails,
UserGPGKeys,
UserImpersonationTokens,
Users,
UserSSHKeys,
Gitlab
} = API;
Object.defineProperty(exports, "GitbeakerRequestError", {
enumerable: true,
get: function () { return requesterUtils.GitbeakerRequestError; }
});
Object.defineProperty(exports, "GitbeakerRetryError", {
enumerable: true,
get: function () { return requesterUtils.GitbeakerRetryError; }
});
Object.defineProperty(exports, "GitbeakerTimeoutError", {
enumerable: true,
get: function () { return requesterUtils.GitbeakerTimeoutError; }
});
exports.AccessLevel = AccessLevel;
exports.Agents = Agents;
exports.AlertManagement = AlertManagement;
exports.ApplicationAppearance = ApplicationAppearance;
exports.ApplicationPlanLimits = ApplicationPlanLimits;
exports.ApplicationSettings = ApplicationSettings;
exports.ApplicationStatistics = ApplicationStatistics;
exports.Applications = Applications;
exports.AuditEvents = AuditEvents;
exports.Avatar = Avatar;
exports.Branches = Branches;
exports.BroadcastMessages = BroadcastMessages;
exports.CodeSuggestions = CodeSuggestions;
exports.CommitDiscussions = CommitDiscussions;
exports.Commits = Commits;
exports.Composer = Composer;
exports.Conan = Conan;
exports.ContainerRegistry = ContainerRegistry;
exports.DashboardAnnotations = DashboardAnnotations;
exports.Debian = Debian;
exports.DependencyProxy = DependencyProxy;
exports.DeployKeys = DeployKeys;
exports.DeployTokens = DeployTokens;
exports.Deployments = Deployments;
exports.DockerfileTemplates = DockerfileTemplates;
exports.Environments = Environments;
exports.EpicAwardEmojis = EpicAwardEmojis;
exports.EpicDiscussions = EpicDiscussions;
exports.EpicIssues = EpicIssues;
exports.EpicLabelEvents = EpicLabelEvents;
exports.EpicLinks = EpicLinks;
exports.EpicNotes = EpicNotes;
exports.Epics = Epics;
exports.ErrorTrackingClientKeys = ErrorTrackingClientKeys;
exports.ErrorTrackingSettings = ErrorTrackingSettings;
exports.Events = Events;
exports.Experiments = Experiments;
exports.ExternalStatusChecks = ExternalStatusChecks;
exports.FeatureFlagUserLists = FeatureFlagUserLists;
exports.FeatureFlags = FeatureFlags;
exports.FreezePeriods = FreezePeriods;
exports.GeoNodes = GeoNodes;
exports.GeoSites = GeoSites;
exports.GitLabCIYMLTemplates = GitLabCIYMLTemplates;
exports.GitignoreTemplates = GitignoreTemplates;
exports.Gitlab = Gitlab;
exports.GitlabPages = GitlabPages;
exports.GoProxy = GoProxy;
exports.GroupAccessRequests = GroupAccessRequests;
exports.GroupAccessTokens = GroupAccessTokens;
exports.GroupActivityAnalytics = GroupActivityAnalytics;
exports.GroupBadges = GroupBadges;
exports.GroupCustomAttributes = GroupCustomAttributes;
exports.GroupDORA4Metrics = GroupDORA4Metrics;
exports.GroupEpicBoards = GroupEpicBoards;
exports.GroupHooks = GroupHooks;
exports.GroupImportExports = GroupImportExports;
exports.GroupInvitations = GroupInvitations;
exports.GroupIssueBoards = GroupIssueBoards;
exports.GroupIterations = GroupIterations;
exports.GroupLDAPLinks = GroupLDAPLinks;
exports.GroupLabels = GroupLabels;
exports.GroupMarkdownUploads = GroupMarkdownUploads;
exports.GroupMemberRoles = GroupMemberRoles;
exports.GroupMembers = GroupMembers;
exports.GroupMilestones = GroupMilestones;
exports.GroupProtectedEnvironments = GroupProtectedEnvironments;
exports.GroupPushRules = GroupPushRules;
exports.GroupRelationExports = GroupRelationExports;
exports.GroupReleases = GroupReleases;
exports.GroupRepositoryStorageMoves = GroupRepositoryStorageMoves;
exports.GroupSAMLIdentities = GroupSAMLIdentities;
exports.GroupSAMLLinks = GroupSAMLLinks;
exports.GroupSCIMIdentities = GroupSCIMIdentities;
exports.GroupServiceAccounts = GroupServiceAccounts;
exports.GroupVariables = GroupVariables;
exports.GroupWikis = GroupWikis;
exports.Groups = Groups;
exports.Helm = Helm;
exports.Import = Import;
exports.InstanceLevelCICDVariables = InstanceLevelCICDVariables;
exports.Integrations = Integrations;
exports.IssueAwardEmojis = IssueAwardEmojis;
exports.IssueDiscussions = IssueDiscussions;
exports.IssueIterationEvents = IssueIterationEvents;
exports.IssueLabelEvents = IssueLabelEvents;
exports.IssueLinks = IssueLinks;
exports.IssueMilestoneEvents = IssueMilestoneEvents;
exports.IssueNoteAwardEmojis = IssueNoteAwardEmojis;
exports.IssueNotes = IssueNotes;
exports.IssueStateEvents = IssueStateEvents;
exports.IssueWeightEvents = IssueWeightEvents;
exports.Issues = Issues;
exports.IssuesStatistics = IssuesStatistics;
exports.JobArtifacts = JobArtifacts;
exports.Jobs = Jobs;
exports.Keys = Keys;
exports.License = License;
exports.LicenseTemplates = LicenseTemplates;
exports.LinkedEpics = LinkedEpics;
exports.Lint = Lint;
exports.Markdown = Markdown;
exports.Maven = Maven;
exports.MergeRequestApprovals = MergeRequestApprovals;
exports.MergeRequestAwardEmojis = MergeRequestAwardEmojis;
exports.MergeRequestContextCommits = MergeRequestContextCommits;
exports.MergeRequestDiscussions = MergeRequestDiscussions;
exports.MergeRequestDraftNotes = MergeRequestDraftNotes;
exports.MergeRequestLabelEvents = MergeRequestLabelEvents;
exports.MergeRequestMilestoneEvents = MergeRequestMilestoneEvents;
exports.MergeRequestNoteAwardEmojis = MergeRequestNoteAwardEmojis;
exports.MergeRequestNotes = MergeRequestNotes;
exports.MergeRequests = MergeRequests;
exports.MergeTrains = MergeTrains;
exports.Metadata = Metadata;
exports.Migrations = Migrations;
exports.NPM = NPM;
exports.Namespaces = Namespaces;
exports.NotificationSettings = NotificationSettings;
exports.NuGet = NuGet;
exports.PackageRegistry = PackageRegistry;
exports.Packages = Packages;
exports.PagesDomains = PagesDomains;
exports.PersonalAccessTokens = PersonalAccessTokens;
exports.PipelineScheduleVariables = PipelineScheduleVariables;
exports.PipelineSchedules = PipelineSchedules;
exports.PipelineTriggerTokens = PipelineTriggerTokens;
exports.Pipelines = Pipelines;
exports.ProductAnalytics = ProductAnalytics;
exports.ProjectAccessRequests = ProjectAccessRequests;
exports.ProjectAccessTokens = ProjectAccessTokens;
exports.ProjectAliases = ProjectAliases;
exports.ProjectBadges = ProjectBadges;
exports.ProjectCustomAttributes = ProjectCustomAttributes;
exports.ProjectDORA4Metrics = ProjectDORA4Metrics;
exports.ProjectHooks = ProjectHooks;
exports.ProjectImportExports = ProjectImportExports;
exports.ProjectInvitations = ProjectInvitations;
exports.ProjectIssueBoards = ProjectIssueBoards;
exports.ProjectIterations = ProjectIterations;
exports.ProjectJobTokenScopes = ProjectJobTokenScopes;
exports.ProjectLabels = ProjectLabels;
exports.ProjectMarkdownUploads = ProjectMarkdownUploads;
exports.ProjectMembers = ProjectMembers;
exports.ProjectMilestones = ProjectMilestones;
exports.ProjectProtectedEnvironments = ProjectProtectedEnvironments;
exports.ProjectPushRules = ProjectPushRules;
exports.ProjectRelationsExport = ProjectRelationsExport;
exports.ProjectReleases = ProjectReleases;
exports.ProjectRemoteMirrors = ProjectRemoteMirrors;
exports.ProjectRepositoryStorageMoves = ProjectRepositoryStorageMoves;
exports.ProjectSnippetAwardEmojis = ProjectSnippetAwardEmojis;
exports.ProjectSnippetDiscussions = ProjectSnippetDiscussions;
exports.ProjectSnippetNotes = ProjectSnippetNotes;
exports.ProjectSnippets = ProjectSnippets;
exports.ProjectStatistics = ProjectStatistics;
exports.ProjectTemplates = ProjectTemplates;
exports.ProjectTerraformState = ProjectTerraformState;
exports.ProjectVariables = ProjectVariables;
exports.ProjectVulnerabilities = ProjectVulnerabilities;
exports.ProjectWikis = ProjectWikis;
exports.Projects = Projects;
exports.ProtectedBranches = ProtectedBranches;
exports.ProtectedTags = ProtectedTags;
exports.PyPI = PyPI;
exports.ReleaseLinks = ReleaseLinks;
exports.Repositories = Repositories;
exports.RepositoryFiles = RepositoryFiles;
exports.RepositorySubmodules = RepositorySubmodules;
exports.ResourceGroups = ResourceGroups;
exports.RubyGems = RubyGems;
exports.Runners = Runners;
exports.Search = Search;
exports.SearchAdmin = SearchAdmin;
exports.SecureFiles = SecureFiles;
exports.ServiceAccounts = ServiceAccounts;
exports.ServiceData = ServiceData;
exports.SidekiqMetrics = SidekiqMetrics;
exports.SidekiqQueues = SidekiqQueues;
exports.SnippetRepositoryStorageMoves = SnippetRepositoryStorageMoves;
exports.Snippets = Snippets;
exports.Suggestions = Suggestions;
exports.SystemHooks = SystemHooks;
exports.Tags = Tags;
exports.TodoLists = TodoLists;
exports.Topics = Topics;
exports.UserCustomAttributes = UserCustomAttributes;
exports.UserEmails = UserEmails;
exports.UserGPGKeys = UserGPGKeys;
exports.UserImpersonationTokens = UserImpersonationTokens;
exports.UserSSHKeys = UserSSHKeys;
exports.UserStarredMetricsDashboard = UserStarredMetricsDashboard;
exports.Users = Users;