UNPKG

@gitbeaker/rest

Version:

Cross Platform implementation of the GitLab API

513 lines (507 loc) 16.1 kB
'use strict'; 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;