@gitkraken/provider-apis 0.25.7 → 0.25.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/dist/index.d.ts +1 -11
- package/dist/index.entity-identifiers.d.ts +2 -0
- package/dist/index.entity-identifiers.js +1 -0
- package/dist/index.js +47 -47
- package/dist/index.provider-utils.d.ts +19 -0
- package/dist/index.provider-utils.js +1 -0
- package/dist/index.providers.d.ts +21 -0
- package/dist/index.providers.js +1104 -0
- package/dist/providers/github/github.d.ts +28 -1
- package/dist/providers/makeProviderAPIs.d.ts +19 -0
- package/dist/types/internalTypes/github.d.ts +19 -0
- package/package.json +7 -1
|
@@ -0,0 +1,1104 @@
|
|
|
1
|
+
"use strict";var kt=Object.create;var ne=Object.defineProperty;var Nt=Object.getOwnPropertyDescriptor;var Ft=Object.getOwnPropertyNames;var Qt=Object.getPrototypeOf,_t=Object.prototype.hasOwnProperty;var Bt=(r,s)=>{for(var e in s)ne(r,e,{get:s[e],enumerable:!0})},nt=(r,s,e,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let n of Ft(s))!_t.call(r,n)&&n!==e&&ne(r,n,{get:()=>s[n],enumerable:!(t=Nt(s,n))||t.enumerable});return r};var jt=(r,s,e)=>(e=r!=null?kt(Qt(r)):{},nt(s||!r||!r.__esModule?ne(e,"default",{value:r,enumerable:!0}):e,r)),Mt=r=>nt(ne({},"__esModule",{value:!0}),r);var Wr={};Bt(Wr,{AzureDevOps:()=>W,Bitbucket:()=>J,BitbucketServer:()=>K,EntityIdentifierProviderType:()=>Tt,EntityType:()=>Gt,EntityVersion:()=>At,GitBuildStatusStage:()=>ot,GitBuildStatusState:()=>oe,GitDiffLineType:()=>Le,GitHub:()=>V,GitHubIssueCloseReason:()=>Ot,GitIssueState:()=>le,GitLab:()=>Z,GitMergeStrategy:()=>H,GitPullRequestMergeableState:()=>M,GitPullRequestReviewState:()=>j,GitPullRequestState:()=>B,Jira:()=>Y,JiraServer:()=>ee,PullRequestAsyncStatus:()=>$t,Trello:()=>te,default:()=>Hr,isFetch:()=>ae});module.exports=Mt(Wr);var ot=(n=>(n.Build="build",n.Production="production",n.Staging="staging",n.Test="test",n))(ot||{}),oe=(p=>(p.ActionRequired="ACTION_REQUIRED",p.Cancelled="CANCELLED",p.Error="ERROR",p.Failed="FAILED",p.Pending="PENDING",p.Running="RUNNING",p.Skipped="SKIPPED",p.Success="SUCCESS",p.Warning="WARNING",p.OptionalActionRequired="OPTIONAL_ACTION_REQUIRED",p))(oe||{}),H=(o=>(o.MergeCommit="MERGE_COMMIT",o.Rebase="REBASE",o.RebaseThenMergeCommit="REBASE_THEN_MERGE_COMMIT",o.FastForward="FAST_FORWARD",o.Squash="SQUASH",o))(H||{}),B=(t=>(t.Open="OPEN",t.Closed="CLOSED",t.Merged="MERGED",t))(B||{}),j=(n=>(n.Approved="APPROVED",n.ChangesRequested="CHANGES_REQUESTED",n.Commented="COMMENTED",n.ReviewRequested="REVIEW_REQUESTED",n))(j||{}),M=(i=>(i.Behind="BEHIND",i.Blocked="BLOCKED",i.Conflicts="CONFLICTS",i.Mergeable="MERGEABLE",i.Unknown="UNKNOWN",i.UnknownAndBlocked="UNKNOWN_AND_BLOCKED",i.Unstable="UNSTABLE",i))(M||{}),Le=(t=>(t.ADDED="ADDED",t.DELETED="DELETED",t.UNMODIFIED="UNMODIFIED",t))(Le||{});var at={APPROVED:0,COMMENTED:1,REVIEW_REQUESTED:2,CHANGES_REQUESTED:3},F=r=>!r||r.length===0?null:r.reduce((s,e)=>at[e.state]>at[s]?e.state:s,"APPROVED");var q=100;var it=jt(require("node-fetch")),ut=globalThis.fetch||it.default;var zt=async r=>{let s=r.headers.get("content-type")||"",e=null;if(s.startsWith("application/json")){let n=await r.text();e=n.trim().length>0?JSON.parse(n):null}else if(s.startsWith("text/")||s==="")e=await r.text();else if(s.startsWith("application/vnd.github.raw+json"))e=await r.arrayBuffer();else throw new Error(`Unsupported content-type: ${s}`);let t={body:e,headers:Object.fromEntries(r.headers.entries()),status:r.status,statusText:r.statusText};if(!r.ok){let n=new Error(r.statusText);throw Object.assign(n,{response:t}),n}return t},$e=r=>async({url:s,...e})=>{let t=await r(s,e);return zt(t)};var ae=(r,s=!1)=>r.name==="fetch"||s;var D=class{constructor(s){let e=(s==null?void 0:s.request)||ut;this.config={...s,request:ae(e,s==null?void 0:s.forceIsFetch)?$e(e):e}}updateConfig(s){this.config={...this.config,...s,request:s.request&&ae(s.request,(s==null?void 0:s.forceIsFetch)??this.config.forceIsFetch)?$e(s.request):this.config.request}}},G=class extends D{};var I=(r,s)=>{let e={};return r&&(e.Authorization=`${s?"Basic":"Bearer"} ${r}`),e},lt=r=>r?r.reduce((s,e)=>(s[e]=!0,s),{}):void 0,Q=(r,s,e)=>!r||s.some(t=>r[t])?e:"",pt=async r=>{var n,o,a;let s=[],e=!0,t;for(;e;){let i=await r(t);s=s.concat(i.data),e=!!((n=i==null?void 0:i.pageInfo)!=null&&n.hasNextPage),t=((o=i==null?void 0:i.pageInfo)==null?void 0:o.endCursor)||((a=i==null?void 0:i.pageInfo)==null?void 0:a.nextPage)}return s};var w=(r,s={})=>I(s.token||r.token,s.isPAT||r.isPAT),dt=r=>r.url.replace("/_apis/git/repositories/","/_git/").replace(`/${r.repository.project.id}/`,`/${encodeURIComponent(r.repository.project.name)}/`).replace(`/${r.repository.id}/`,`/${encodeURIComponent(r.repository.name)}/`).replace("/pullRequests/","/pullrequest/");var ct="https://app.vssps.visualstudio.com/_apis",v="https://dev.azure.com",Ht={active:"OPEN",completed:"MERGED",abandoned:"CLOSED"},Wt={10:"APPROVED",5:"APPROVED",0:"REVIEW_REQUESTED",[-5]:"CHANGES_REQUESTED",[-10]:"CHANGES_REQUESTED"},Ae=r=>({id:r.id,name:r.displayName??null,username:(r.uniqueName||r.displayName)??null,email:null,avatarUrl:r.imageUrl??null,url:null}),ue=r=>r.startsWith("refs/heads/")?r.replace("refs/heads/",""):r,ie=(r,s)=>{var n;let e=[],t=[];return s.reviewers.forEach(o=>{let a={reviewer:Ae(o),state:Wt[o.vote??0]||"REVIEW_REQUESTED"};o.isRequired&&e.push(a),t.push(a)}),{id:s.pullRequestId.toString(),title:s.title,number:s.codeReviewId,state:Ht[s.status],isDraft:s.isDraft,commentCount:null,upvoteCount:null,author:Ae(s.createdBy),createdDate:new Date(s.creationDate),updatedDate:new Date(s.closedDate||s.creationDate),closedDate:s.closedDate?new Date(s.closedDate):null,mergedDate:s.closedDate&&s.status==="completed"?new Date(s.closedDate):null,repository:{id:s.repository.id,name:s.repository.name,project:s.repository.project.name,owner:{login:r},remoteInfo:null},headCommit:{buildStatuses:null},baseRef:{name:ue(s.targetRefName),oid:s.lastMergeTargetCommit.commitId},headRef:{name:ue(s.sourceRefName),oid:s.lastMergeSourceCommit.commitId},url:dt(s),assignees:s.reviewers.map(Ae),reviews:t,reviewDecision:F(e),additions:null,deletions:null,fileCount:null,commitCount:null,headRepository:null,mergeableState:"UNKNOWN",labels:((n=s.labels)==null?void 0:n.map(o=>({color:null,description:null,id:o.id,name:o.name})))??[],permissions:null}},gt=(r,s)=>({id:s.id,name:s.name,namespace:r,project:s.project.name,webUrl:s.webUrl,httpsUrl:s.remoteUrl,sshUrl:s.sshUrl,defaultBranch:s.defaultBranch?{name:ue(s.defaultBranch)}:null,permission:null}),Jt=(r,s,e,t)=>{var l,p,d,c,g,m;let n=e.fields,o=n["System.AssignedTo"],a=n["System.State"],i=n["System.WorkItemType"],u;return a&&i&&(u=(l=t[i])==null?void 0:l[a]),{id:e.id.toString(),number:e.id.toString(),title:n["System.Title"],commentCount:n["System.CommentCount"],author:{avatarUrl:((d=(p=n["System.CreatedBy"]._links)==null?void 0:p.avatar)==null?void 0:d.href)??null,email:null,id:n["System.CreatedBy"].id,name:n["System.CreatedBy"].uniqueName??null,username:n["System.CreatedBy"].displayName??null,url:null},closedDate:n["Microsoft.VSTS.Common.ClosedDate"]?new Date(n["Microsoft.VSTS.Common.ClosedDate"]):null,createdDate:new Date(n["System.CreatedDate"]),updatedDate:new Date(n["System.ChangedDate"]),url:e._links.html.href,assignees:o?[{avatarUrl:((g=(c=o._links)==null?void 0:c.avatar)==null?void 0:g.href)??null,email:null,id:o.id,name:o.uniqueName??null,username:o.displayName??null,url:null}]:[],description:null,state:{name:(u==null?void 0:u.title)||a,color:null},type:n["System.WorkItemType"],repository:null,project:{namespace:r,name:s,resourceId:null,key:null,id:null},upvoteCount:0,labels:((m=e.fields["System.Tags"])==null?void 0:m.split(";").map(h=>({color:null,description:null,id:null,name:h.trim()})))??[]}},W=class extends D{async getCurrentUser(s={},e={}){if(e.isPAT||this.config.isPAT)throw new Error("Azure DevOps does not support PATs for this function.");let t=await this.config.request({url:`${ct}/profile/profiles/me`,headers:w(this.config,e)});return{data:{id:t.body.id,name:t.body.displayName,username:t.body.displayName,email:t.body.emailAddress,avatarUrl:null,url:null}}}async getCurrentUserForInstance(s,e={}){let n=(await this.config.request({url:`${v}/${encodeURIComponent(s.namespace)}/_apis/ConnectionData`,headers:w(this.config,e)})).body.authorizedUser;if(n.providerDisplayName==="Anonymous")throw new Error("Current user not found.");return{data:{id:n.id,name:n.providerDisplayName,username:n.providerDisplayName,email:n.properties.Account.$value,avatarUrl:null}}}async getUserForCommit(s,e={}){if(!s.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let n=(await this.config.request({url:`${v}/${encodeURIComponent(s.repo.namespace)}/${encodeURIComponent(s.repo.project)}/_apis/git/repositories/${encodeURIComponent(s.repo.name)}/commits/${s.oid}`,headers:w(this.config,e)})).body.author;return{data:{name:n.name,email:n.email,avatarUrl:n.imageUrl}}}async getOrgsForUser(s,e={}){return{data:(await this.config.request({url:`${ct}/accounts?memberId=${s.userId}&api-version=6.0`,headers:w(this.config,e)})).body.value.map(n=>({id:n.accountId,name:n.accountName}))}}async getAzureProjects(s,e={}){let t=new URL(`${v}/${encodeURIComponent(s.namespace)}/_apis/projects`);t.searchParams.set("$top",q.toString()),s.cursor&&t.searchParams.set("$skip",s.cursor);let n=await this.config.request({url:t.toString(),headers:w(this.config,e)}),o=n.headers["x-ms-continuationtoken"];return{pageInfo:{hasNextPage:!!o,endCursor:o||null},data:n.body.value.map(a=>({id:a.id,name:a.name,namespace:s.namespace}))}}async getAzureProjectScopeDescriptor(s,e={}){let{namespace:t,projectId:n}=s;return{data:{scope:(await this.config.request({url:`https://vssps.dev.azure.com/${encodeURIComponent(t)}/_apis/graph/descriptors/${n}?api-version=6.0`,headers:w(this.config,e)})).body.value}}}async getAzureGraphAccountsForAzureProject(s,e={}){let{namespace:t,projectScopeDescriptor:n,cursor:o}=s,a=new URL(`https://vssps.dev.azure.com/${encodeURIComponent(t)}/_apis/graph/users`);n&&a.searchParams.set("scopeDescriptor",n),o&&a.searchParams.set("continuationToken",o);let i=await this.config.request({url:a.toString(),headers:w(this.config,e)}),u=i.headers["x-ms-continuationtoken"];return{pageInfo:{endCursor:u||null,hasNextPage:!!u},data:i.body.value.map(l=>{var p,d,c,g;return{avatarUrl:((d=(p=l._links)==null?void 0:p.avatar)==null?void 0:d.href)??null,descriptor:l.descriptor??null,email:l.mailAddress??null,name:l.displayName??null,storageKeyURL:((g=(c=l._links)==null?void 0:c.storageKey)==null?void 0:g.href)??null,username:l.displayName??null}})}}async getAccountFromAzureGraphAccount(s,e={}){let{azureGraphAccount:t}=s;if(!t.storageKeyURL)throw new Error("Expected 'storageKeyURL' to not be null for 'azureGraphAccount'");let n=await this.config.request({url:t.storageKeyURL,headers:w(this.config,e)});return{data:{avatarUrl:t.avatarUrl,email:t.email,id:n.body.value,name:t.name,username:t.username,url:null}}}async getAccountsFromAzureGraphAccounts(s,e={}){let t=[];for(let n of s.azureGraphAccounts){let o=await this.getAccountFromAzureGraphAccount({azureGraphAccount:n},e);t.push(o.data)}return{data:t}}async getRepo(s,e={}){if(!s.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let t=await this.config.request({url:`${v}/${encodeURIComponent(s.namespace)}/${encodeURIComponent(s.project)}/_apis/git/repositories/${encodeURIComponent(s.name)}`,headers:w(this.config,e)});return{data:gt(s.namespace,t.body)}}async getRepos(s,e={}){let t=[],n=[];return await Promise.all(s.map(async o=>{try{let a=await this.getRepo(o,e);t.push(a.data)}catch(a){n.push({input:o,error:a})}})),{data:t,errors:n}}async getReposForAzureProject(s,e={}){if(!s.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');return{data:(await this.config.request({url:`${v}/${encodeURIComponent(s.namespace)}/${encodeURIComponent(s.project)}/_apis/git/repositories`,headers:w(this.config,e)})).body.value.map(n=>gt(s.namespace,n))}}async getRefs(s,e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let n=new URL(`${v}/${encodeURIComponent(e.repo.namespace)}/${encodeURIComponent(e.repo.project)}/_apis/git/repositories/${encodeURIComponent(e.repo.name)}/refs`);n.searchParams.set("filter",s),n.searchParams.set("$top",q.toString()),e.cursor&&n.searchParams.set("continuationToken",e.cursor);let o=await this.config.request({url:n.toString(),headers:w(this.config,t)}),a=o.headers["x-ms-continuationtoken"];return{pageInfo:{hasNextPage:!!a,endCursor:a||null},data:o.body.value.map(i=>({name:ue(i.name),commit:{oid:i.objectId,authoredDate:null,committedDate:null}}))}}async getBranches(s,e={}){return this.getRefs("heads",s,e)}async getTags(s,e={}){return this.getRefs("tags",s,e)}async getPullRequestsForRepoBase(s,e={},t=100){let{page:n,repo:o,assigneeLogins:a,authorLogin:i}=s||{},u=n||1;if(!o.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let l="searchCriteria.status=1";return a&&a.length&&(l+=`&searchCriteria.reviewerId=${a[0]}`),i&&(l+=`&searchCriteria.creatorId=${i}`),await this.config.request({url:`${e.baseUrl||v}/${encodeURIComponent(o.namespace)}/${encodeURIComponent(o.project||"")}/_apis/git/repositories/${encodeURIComponent(o.name)}/pullRequests?${l}&%24top=${t}&%24skip=${(u-1)*t}`,headers:w(this.config,e)})}async getPullRequestsForRepo(s,e={}){let n=s.page||1,o=await this.getPullRequestsForRepoBase(s,e,100);return{pageInfo:{hasNextPage:o.body.value.length===100,nextPage:n+1},data:o.body.value.map(a=>ie(s.repo.namespace,a))}}async getPullRequestsForRepos(s,e={}){if(!s.repos.every(o=>o.project))throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{repos:t}=s||{},n=[];return await Promise.all(t.map(async o=>{try{(await this.getPullRequestsForRepoBase({repo:o,...s},e)).body.value.forEach(i=>{n.push(ie(o.namespace,i))})}catch(a){if(a.statusCode!==404&&a.statusCode!==401)throw a}})),{data:n}}async getPullRequestsForProjectBase(s,e={},t=100){let{namespace:n,project:o,page:a,assigneeLogins:i,authorLogin:u}=s,l=a||1,p=new URL(`${e.baseUrl||v}/${encodeURIComponent(n)}/${encodeURIComponent(o)}/_apis/git/pullRequests`);return p.searchParams.set("searchCriteria.status","1"),p.searchParams.set("$top",t.toString()),p.searchParams.set("$skip",((l-1)*t).toString()),i&&i.length&&p.searchParams.set("searchCriteria.reviewerId",i[0]),u&&p.searchParams.set("searchCriteria.creatorId",u),await this.config.request({url:p.toString(),headers:w(this.config,e)})}async getPullRequestsForProject(s,e={}){let n=s.page||1,o=await this.getPullRequestsForProjectBase(s,e,100);return{pageInfo:{hasNextPage:o.body.value.length===100,nextPage:n+1},data:o.body.value.map(a=>ie(s.namespace,a))}}async getPullRequestsForProjects(s,e={}){let{projects:t}=s||{},n=[];return await Promise.all(t.map(async o=>{try{(await this.getPullRequestsForProjectBase({...o,...s},e)).body.value.forEach(i=>{n.push(ie(o.namespace,i))})}catch(a){if(a.statusCode!==404&&a.statusCode!==401)throw a}})),{data:n}}async getAzurePullRequestLastMergeStatus(s,e={}){if(!s.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{repo:{namespace:t,project:n,name:o},pullRequestId:a}=s,i=await this.config.request({url:`${e.baseUrl||v}/${encodeURIComponent(t)}/${encodeURIComponent(n||"")}/_apis/git/repositories/${o}/pullrequests/${a}?includeCommits=true?api-version=6.0`,headers:{...w(this.config,e)}});if(!i.body.mergeStatus)throw new Error("Could not fetch pull request");return{data:i.body.mergeStatus}}async updatePullRequest(s,e,t){return await this.config.request({method:"PATCH",url:`${t.baseUrl||v}/${encodeURIComponent(s.repository.owner.login)}/${encodeURIComponent(s.repository.project)}/_apis/git/repositories/${s.repository.name}/pullrequests/${s.id}?api-version=6.0`,body:e,headers:{...w(this.config,t),"Content-Type":"application/json"}})}async closePullRequest(s,e={}){let{pullRequest:t}=s,n={status:"abandoned"};if(!(await this.updatePullRequest(t,JSON.stringify(n),e)).body.status)throw new Error("Could not close pull request")}async mergePullRequest(s,e={}){var u;let{pullRequest:t,mergeStrategy:n}=s,o;switch(n){case"MERGE_COMMIT":{o="noFastForward";break}case"REBASE":{o="rebase";break}case"REBASE_THEN_MERGE_COMMIT":{o="rebaseMerge";break}case"SQUASH":{o="squash";break}}let a={completionOptions:{mergeStrategy:o},lastMergeSourceCommit:{commitId:(u=t.headRef)==null?void 0:u.oid},status:"completed"};if(!(await this.updatePullRequest(t,JSON.stringify(a),e)).body.status)throw new Error("Could not merge pull request")}async addPullRequestLabel(s,e={}){let{pullRequest:t,label:n}=s;if(!t.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let o={name:n.name};if(!(await this.config.request({method:"POST",url:`${e.baseUrl||v}/${encodeURIComponent(t.repository.owner.login)}/${encodeURIComponent(t.repository.project)}/_apis/git/repositories/${t.repository.name}/pullrequests/${t.id}/labels?api-version=6.0`,body:JSON.stringify(o),headers:{...w(this.config,e),"Content-Type":"application/json"}})).body.id)throw new Error("Could not add pull request label")}async removePullRequestLabel(s,e={}){let{pullRequest:t,label:n}=s;if(!t.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');await this.config.request({method:"DELETE",url:`${e.baseUrl||v}/${encodeURIComponent(t.repository.owner.login)}/${encodeURIComponent(t.repository.project)}/_apis/git/repositories/${t.repository.name}/pullrequests/${t.id}/labels/${encodeURIComponent(n.name)}?api-version=6.0`,headers:{...w(this.config,e)}})}async setPullRequestLabels(s,e={}){let{pullRequest:t,labels:n}=s;if(!t.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let o=t.labels;if(!o)throw new Error('Azure DevOps requires "labels" for this function.');for(let a of n)o.find(i=>i.id===a.id)||await this.addPullRequestLabel({pullRequest:t,label:a},e);for(let a of o)n.find(i=>a.id===i.id)||await this.removePullRequestLabel({pullRequest:t,label:a},e)}async setPullRequestAsDraft(s,e={}){let{pullRequest:t,isDraft:n}=s,o={isDraft:n};if(!(await this.updatePullRequest(t,JSON.stringify(o),e)).body.status)throw new Error("Could not set the pull request as draft")}async addPullRequestReviewer(s,e={}){let{pullRequest:t,reviewer:n,isRequired:o}=s,a={id:n.id,isRequired:o};if(!(await this.config.request({method:"PUT",url:`${e.baseUrl||v}/${encodeURIComponent(t.repository.owner.login)}/${encodeURIComponent(t.repository.project)}/_apis/git/repositories/${t.repository.name}/pullrequests/${t.id}/reviewers/${n.id}?api-version=6.0`,body:JSON.stringify(a),headers:{...w(this.config,e),"Content-Type":"application/json"}})).body.id)throw new Error("Could not add pull request reviewer")}async removePullRequestReviewer(s,e={}){let{pullRequest:t,reviewer:n}=s;await this.config.request({method:"DELETE",url:`${e.baseUrl||v}/${encodeURIComponent(t.repository.owner.login)}/${encodeURIComponent(t.repository.project)}/_apis/git/repositories/${t.repository.name}/pullrequests/${t.id}/reviewers/${n.id}?api-version=6.0`,headers:{...w(this.config,e),Accept:"application/json"}})}async setPullRequestReviewers(s,e={}){let{pullRequest:t,reviewers:n}=s;for(let o of n)t.assignees.find(a=>a.id===o.id)||await this.addPullRequestReviewer({pullRequest:t,reviewer:o,isRequired:!0},e);for(let o of t.assignees)n.find(a=>o.id===a.id)||await this.removePullRequestReviewer({pullRequest:t,reviewer:o},e)}async getIssuesForAzureProject(s,e={}){let{page:t,assigneeLogins:n,authorLogin:o,mentionLogin:a,labelNames:i,statusByWorkItemIdByStatusId:u}=s||{},l=t||1,p=200,d=["[Microsoft.VSTS.Common.ClosedDate] = ''","[System.TeamProject] = @project","[Microsoft.VSTS.Common.ResolvedDate] = ''"];o&&d.push(`[System.CreatedBy] = '${o.replace("'","''")}'`),n&&n[0]&&d.push(`[System.AssignedTo] = '${n[0].replace("'","''")}'`),a&&d.push("[System.Id] IN (@recentMentions)"),i&&i.forEach(b=>d.push(`[System.Tags] Contains '${b}'`));let c=`Select [Microsoft.VSTS.Common.ClosedDate], [Microsoft.VSTS.Common.ResolvedDate] From WorkItems Where ${d.join(" AND ")} order by [System.CreatedDate] desc`,g=await this.config.request({url:`${e.baseUrl||v}/${encodeURIComponent(s.namespace)}/${encodeURIComponent(s.project)}/_apis/wit/wiql?api-version=6.0`,body:JSON.stringify({query:c}),method:"POST",headers:{...w(this.config,e),"Content-Type":"application/json"}}),m=g.body.workItems.slice((l-1)*p,p*l).map(b=>b.id);if(m.length==0)return{pageInfo:{hasNextPage:!1,nextPage:null},data:[]};let h=await this.config.request({url:`${e.baseUrl||v}/${encodeURIComponent(s.namespace)}/${encodeURIComponent(s.project)}/_apis/wit/workitemsbatch?api-version=6.0`,body:JSON.stringify({ids:m,$expand:"Links"}),method:"POST",headers:{...w(this.config,e),"Content-Type":"application/json"}});return{pageInfo:{hasNextPage:g.body.workItems.length>p*l,nextPage:l+1},data:h.body.value.map(b=>Jt(s.namespace,s.project,b,u||{}))}}async updateIssue(s,e,t={}){return await this.config.request({method:"PATCH",url:`${t.baseUrl||v}/${encodeURIComponent(s.project.namespace)}/${encodeURIComponent(s.project.name)}/_apis/wit/workitems/${s.id}?api-version=6.0`,body:JSON.stringify(e),headers:{...w(this.config,t),"Content-Type":"application/json-patch+json"}})}async setIssueStatus(s,e={}){var i;let{issue:t,status:n}=s,o=[{op:"add",path:"/fields/System.State",value:n.name}];if(!((i=(await this.updateIssue(t,o,e)).body.fields)!=null&&i["System.State"]))throw new Error("Could not set issue status")}async setIssueAssignee(s,e={}){var i;let{issue:t,assignee:n}=s,o=[{op:"add",path:"/fields/System.AssignedTo",value:(n==null?void 0:n.name)??""}];if(!((i=(await this.updateIssue(t,o,e)).body.fields)!=null&&i["System.State"]))throw new Error("Could not set issue assignee")}async setIssueLabels(s,e={}){var u;let{issue:t,labels:n}=s,a=[{op:"replace",path:"/fields/System.Tags",value:n.map(l=>l.name).join(";")}];if(!((u=(await this.updateIssue(t,a,e)).body.fields)!=null&&u["System.Tags"]))throw new Error("Could not set issue tags")}async getIssueTypesForAzureProject(s,e={}){if(!s.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{namespace:t,project:n}=s;return{data:(await this.config.request({url:`${e.baseUrl||v}/${encodeURIComponent(t)}/${encodeURIComponent(n||"")}/_apis/wit/workitemtypes?api-version=6.0`,headers:{...w(this.config,e)}})).body.value}}async getLabelsForProject(s,e={}){let{namespace:t,project:n}=s;return{data:(await this.config.request({url:`${e.baseUrl||v}/${encodeURIComponent(t)}/${encodeURIComponent(n||"")}/_apis/wit/tags?api-version=6.0`,headers:{...w(this.config,e)}})).body.value.map(a=>({color:null,description:null,id:a.id,name:a.name,url:a.url}))}}};var C=(r,s={})=>I(s.token||r.token,s.isPAT||r.isPAT);var L="https://api.bitbucket.org/2.0",Kt={OPEN:"OPEN",MERGED:"MERGED",DECLINED:"CLOSED"},ht=r=>({id:r.uuid,name:r.display_name||r.nickname,username:r.nickname||r.display_name,email:null,avatarUrl:r.links.avatar.href,url:r.links.html.href}),mt=r=>{var s,e;return{id:r.uuid,namespace:r.workspace.slug,name:r.slug,webUrl:r.links.html.href,httpsUrl:((s=r.links.clone.find(t=>t.name==="https"))==null?void 0:s.href)??null,sshUrl:((e=r.links.clone.find(t=>t.name==="ssh"))==null?void 0:e.href)??null,defaultBranch:{name:r.mainbranch.name},permission:null}},Ge=r=>{let s=r.id;return{id:s.toString(),title:r.title,number:s,state:Kt[r.state],isDraft:!1,commentCount:r.comment_count,upvoteCount:null,author:ht(r.author),createdDate:new Date(r.created_on),updatedDate:new Date(r.updated_on),closedDate:null,mergedDate:null,repository:{id:r.destination.repository.uuid,name:r.destination.repository.name,owner:{login:r.destination.repository.full_name.split("/")[0]},remoteInfo:null},headCommit:{buildStatuses:null},baseRef:{name:r.destination.branch.name,oid:r.destination.commit.hash},headRef:{name:r.source.branch.name,oid:r.source.commit.hash},url:r.links.html.href,assignees:null,reviews:null,reviewDecision:null,additions:null,deletions:null,fileCount:null,commitCount:null,headRepository:null,mergeableState:"UNKNOWN",permissions:null}},J=class extends D{async refreshToken(s){return{data:(await this.config.request({url:"https://bitbucket.org/site/oauth2/access_token",method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Authorization:`Basic ${s.base64ClientIDColonClientSecret}`},body:`grant_type=refresh_token&refresh_token=${s.refreshToken}`})).body}}async getCurrentUser(s={},e={}){let t=await this.config.request({url:`${L}/user`,headers:C(this.config,e)});return{data:ht(t.body)}}async getUserForCommit(s,e={}){var a;let n=(await this.config.request({url:`${L}/repositories/${s.repo.namespace}/${s.repo.name}/commit/${s.oid}`,headers:C(this.config,e)})).body.author,o=n.raw.match(/([^<]+)<(.+)>/);return{data:{name:o?o[1].trim():null,email:o?o[2]:null,avatarUrl:((a=n.user)==null?void 0:a.links.avatar.href)||null}}}async getRepo(s,e={}){let t=await this.config.request({url:`${L}/repositories/${s.namespace}/${s.name}`,headers:C(this.config,e)});return{data:mt(t.body)}}async getRepos(s,e={}){let t=[],n=[];return await Promise.all(s.map(async o=>{try{let a=await this.getRepo(o,e);t.push(a.data)}catch(a){n.push({input:o,error:a})}})),{data:t,errors:n}}async getReposForCurrentUser(s,e={}){let t=new URL(`${L}/repositories`);t.searchParams.set("role","member"),t.searchParams.set("pagelen",q.toString()),s.cursor&&t.searchParams.set("after",s.cursor);let n=await this.config.request({url:t.toString(),headers:C(this.config,e)}),o=!!n.body.next,a=null;return n.body.next&&(a=new URL(n.body.next).searchParams.get("after")),{pageInfo:{hasNextPage:o,endCursor:a},data:n.body.values.map(mt)}}async getBranches(s,e={}){var a;let t=new URL(`${L}/repositories/${s.repo.namespace}/${s.repo.name}/refs/branches`);t.searchParams.set("page",((a=s.page)==null?void 0:a.toString())||"1"),t.searchParams.set("pagelen",q.toString());let n=await this.config.request({url:t.toString(),headers:C(this.config,e)}),o=!!n.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?n.body.page+1:null},data:n.body.values.map(i=>{let u=new Date(i.target.date);return{name:i.name,commit:{oid:i.target.hash,authoredDate:u,committedDate:u}}})}}async getTags(s,e={}){let t=new URL(`${L}/repositories/${s.repo.namespace}/${s.repo.name}/refs/tags`);t.searchParams.set("pagelen",q.toString()),s.cursor&&t.searchParams.set("page",s.cursor);let n=await this.config.request({url:t.toString(),headers:C(this.config,e)}),o=!!n.body.next,a=null;return n.body.next&&(a=new URL(n.body.next).searchParams.get("page")),{pageInfo:{hasNextPage:o,endCursor:a},data:n.body.values.map(i=>{let u=new Date(i.target.date);return{name:i.name,commit:{oid:i.target.hash,authoredDate:u,committedDate:u}}})}}async getPullRequestsForUser(s,e={}){var a;let t=new URL(`${L}/pullrequests/${s.userId}`);t.searchParams.set("page",((a=s.page)==null?void 0:a.toString())||"1"),t.searchParams.set("pagelen","50");let n=await this.config.request({url:t.toString(),headers:C(this.config,e)}),o=!!n.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?n.body.page+1:null},data:n.body.values.map(Ge)}}async getPullRequestsForRepoBase(s,e={}){var n;let t=new URL(`${L}/repositories/${encodeURI(s.repo.namespace)}/${encodeURI(s.repo.name)}/pullrequests?state=OPEN`);return t.searchParams.set("page",((n=s.page)==null?void 0:n.toString())||"1"),t.searchParams.set("pagelen","50"),await this.config.request({url:t.toString(),headers:C(this.config,e)})}async getPullRequestsForRepo(s,e={}){let t=[],n=await this.getPullRequestsForRepoBase(s,e);n.body.values.forEach(a=>{if(s.authorLogin&&a.author.uuid!==s.authorLogin)return null;t.push(Ge(a))});let o=!!n.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?n.body.page+1:null},data:t}}async getPullRequestsForRepos(s,e={}){let t=[];return await Promise.all(s.repos.map(async n=>{try{(await this.getPullRequestsForRepoBase({repo:n,...s},e)).body.values.forEach(a=>{if(s.authorLogin&&a.author.uuid!==s.authorLogin)return null;t.push(Ge(a))})}catch(o){if(o.statusCode!==404&&o.statusCode!==401)throw o}})),{data:t}}async closePullRequest(s,e={}){let{pullRequest:t}=s;if(!(await this.config.request({method:"POST",url:`${L}/repositories/${t.repository.owner.login}/${t.repository.name}/pullrequests/${t.id}/decline`,headers:C(this.config,e)})).body.title)throw new Error("Could not close pull request")}async mergePullRequest(s,e={}){let{pullRequest:t,mergeStrategy:n}=s,o;switch(n){case"MERGE_COMMIT":{o="merge_commit";break}case"FAST_FORWARD":{o="fast_forward";break}case"SQUASH":{o="squash";break}}let a={merge_strategy:o,type:"pullrequest"};if(!(await this.config.request({method:"POST",url:`${L}/repositories/${t.repository.owner.login}/${t.repository.name}/pullrequests/${t.id}/merge`,body:JSON.stringify(a),headers:{...C(this.config,e),"Content-Type":"application/json"}})).body.title)throw new Error("Could not merge pull request")}async setPullRequestReviewers(s,e={}){let{pullRequest:t,reviewers:n}=s,o={reviewers:n.map(i=>{if(i.username)throw new Error('Bitbucket reviewer requires "username" for this function.');return{username:i.username}})};if(!(await this.config.request({method:"PUT",url:`${L}/repositories/${t.repository.owner.login}/${t.repository.name}/pullrequests/${t.id}`,body:JSON.stringify(o),headers:{...C(this.config,e),"Content-Type":"application/json"}})).body.title)throw new Error("Could not set pull request reviewers")}};var Oe=r=>({name:r.displayName,email:r.emailAddress,avatarUrl:r.avatarUrl??null,id:r.id.toString(),username:r.name,url:r.links.self[0].href}),Te=r=>{var u,l,p,d,c,g;let s={OPEN:"OPEN",MERGED:"MERGED",DECLINED:"CLOSED"},e={UNAPPROVED:"REVIEW_REQUESTED",NEEDS_WORK:"CHANGES_REQUESTED",APPROVED:"APPROVED"},t=r.reviewers.map(m=>({reviewer:Oe(m.user),state:e[m.status]})),n=((u=r.toRef.repository.links.clone.find(m=>m.name==="ssh"))==null?void 0:u.href)??null,o=((l=r.toRef.repository.links.clone.find(m=>m.name==="https"))==null?void 0:l.href)??null;o||(o=((p=r.toRef.repository.links.clone.find(m=>m.name==="http"))==null?void 0:p.href)??null);let a=((d=r.fromRef.repository.links.clone.find(m=>m.name==="ssh"))==null?void 0:d.href)??null,i=((c=r.fromRef.repository.links.clone.find(m=>m.name==="https"))==null?void 0:c.href)??null;return i||(i=((g=r.fromRef.repository.links.clone.find(m=>m.name==="http"))==null?void 0:g.href)??null),{id:r.id.toString(),number:r.id,title:r.title,url:r.links.self[0].href,state:s[r.state],isDraft:!1,createdDate:new Date(r.createdDate),updatedDate:new Date(r.updatedDate),closedDate:r.closedDate?new Date(r.closedDate):null,mergedDate:r.state=="MERGED"&&r.closedDate?new Date(r.closedDate):null,baseRef:{name:r.toRef.displayId,oid:r.toRef.latestCommit},headRef:{name:r.fromRef.displayId,oid:r.fromRef.latestCommit},commentCount:r.properties.commentCount,upvoteCount:null,commitCount:null,fileCount:null,additions:null,deletions:null,author:Oe(r.author.user),assignees:null,reviews:t,reviewDecision:F(t),repository:{id:r.toRef.repository.id.toString(),name:r.toRef.repository.name,owner:{login:r.toRef.repository.project.key},remoteInfo:o&&n?{cloneUrlHTTPS:o,cloneUrlSSH:n}:null},headRepository:{id:r.fromRef.repository.id.toString(),name:r.fromRef.repository.name,owner:{login:r.fromRef.repository.project.key},remoteInfo:i&&a?{cloneUrlHTTPS:i,cloneUrlSSH:a}:null},headCommit:null,mergeableState:"UNKNOWN",permissions:null,version:r.version}},ft=r=>{var s,e,t;return{id:r.id.toString(),namespace:r.project.key,name:r.slug,webUrl:((s=r.links.self[0])==null?void 0:s.href)??null,httpsUrl:((e=r.links.clone.find(n=>n.name==="https"||n.name==="http"))==null?void 0:e.href)??null,sshUrl:((t=r.links.clone.find(n=>n.name==="ssh"))==null?void 0:t.href)??null,defaultBranch:null,permission:null}},K=class extends G{getBaseUrl(s){let e=s.baseUrl||this.config.baseUrl;if(!e)throw new Error('Bitbucket Server requires "baseUrl"');return e}getRequestHeaders(s){return I(s.token||this.config.token)}async getCurrentUser(s={},e={}){let t=await this.config.request({url:`${this.getBaseUrl(e)}/users?limit=2`,headers:this.getRequestHeaders(e)}),{headers:{"x-auserid":n,"x-ausername":o}}=t,a=n?parseInt(n,10):null,i=decodeURIComponent(o),l=(await this.config.request({url:`${this.getBaseUrl(e)}/users?filter=${o}&avatarSize=64`,headers:this.getRequestHeaders(e)})).body.values.find(({emailAddress:p,id:d,name:c,slug:g})=>a?a===d:i===c||i===p||i===g);if(!l)throw new Error("Could not find current Bitbucket Server user");return{data:Oe(l)}}async getRepo(s,e={}){let t=await this.config.request({url:`${this.getBaseUrl(e)}/projects/${s.namespace}/repos/${s.name}`,headers:this.getRequestHeaders(e)});return{data:ft(t.body)}}async getRepos(s,e={}){let t=[],n=[];return await Promise.all(s.map(async o=>{try{let a=await this.getRepo(o,e);t.push(a.data)}catch(a){n.push({input:o,error:a})}})),{data:t,errors:n}}async getReposForCurrentUser(s,e={}){let t=s.page??0,n=await this.config.request({url:`${this.getBaseUrl(e)}/repos?start=${t}`,headers:this.getRequestHeaders(e)});return{pageInfo:{hasNextPage:!n.body.isLastPage,nextPage:n.body.nextPageStart},data:n.body.values.map(ft)}}async getPullRequestsForRepoBase(s,e={}){var n;let t=new URL(`${this.getBaseUrl(e)}/projects/${encodeURI(s.repo.namespace)}/repos/${encodeURI(s.repo.name)}/pull-requests?state=OPEN`);return t.searchParams.set("start",((n=s.page)==null?void 0:n.toString())||"0"),t.searchParams.set("limit","50"),await this.config.request({url:t.toString(),headers:this.getRequestHeaders(e)})}async getPullRequestsForRepo(s,e={}){let t=[],n=await this.getPullRequestsForRepoBase(s,e);n.body.values.forEach(a=>{if(s.authorLogin&&a.author.user.name!==s.authorLogin)return null;t.push(Te(a))});let o=n.body.values.length!==0;return{pageInfo:{hasNextPage:o,nextPage:o?n.body.start+n.body.values.length:null},data:t}}async getPullRequestsForRepos(s,e={}){let t=[];return await Promise.all(s.repos.map(async n=>{try{(await this.getPullRequestsForRepoBase({repo:n,...s},e)).body.values.forEach(a=>{if(s.authorLogin&&a.author.user.name!==s.authorLogin)return null;t.push(Te(a))})}catch(o){if(o.statusCode!==404&&o.statusCode!==401)throw o}})),{data:t}}async getPullRequestsForCurrentUser(s,e={}){var a;let t=new URL(`${this.getBaseUrl(e)}/dashboard/pull-requests`);t.searchParams.set("state","OPEN"),t.searchParams.set("start",((a=s.page)==null?void 0:a.toString())||"0"),t.searchParams.set("limit","50");let n=await this.config.request({url:t.toString(),headers:this.getRequestHeaders(e)}),o=n.body.values.length!==0;return{pageInfo:{hasNextPage:o,nextPage:o?n.body.start+n.body.values.length:null},data:n.body.values.map(Te)}}async closePullRequest(s,e={}){let{pullRequest:t}=s;if(t.version===void 0)throw new Error('Bitbucket Server requires "version" for this function.');if(!(await this.config.request({method:"POST",url:`${this.getBaseUrl(e)}/projects/${t.repository.owner.login}/repos/${t.repository.name}/pull-requests/${t.id}/decline`,body:JSON.stringify({version:t.version}),headers:{...this.getRequestHeaders(e),"Content-Type":"application/json"}})).body.title)throw new Error("Could not close pull request")}async mergePullRequest(s,e={}){let{pullRequest:t,mergeStrategyId:n}=s;if(s.mergeStrategy)throw new Error('Bitbucket Server uses "mergeStrategyId" instead of "mergeStrategy".');if(t.version===void 0)throw new Error('Bitbucket Server requires "version" for this function.');if(!(await this.config.request({method:"POST",url:`${this.getBaseUrl(e)}/projects/${t.repository.owner.login}/repos/${t.repository.name}/pull-requests/${t.id}/merge`,body:JSON.stringify({strategyId:n,version:t.version}),headers:{...this.getRequestHeaders(e),"Content-Type":"application/json"}})).body.title)throw new Error("Could not merge pull request")}async getMergeStrategies(s={}){let e=await this.config.request({url:`${this.getBaseUrl(s)}/admin/pull-requests/git`,headers:{...this.getRequestHeaders(s),"Content-Type":"application/json"}});return{data:{defaultStrategy:e.body.mergeConfig.defaultStrategy,strategies:e.body.mergeConfig.strategies}}}async setPullRequestReviewers(s,e={}){let{pullRequest:t,reviewers:n}=s;if(t.version===void 0)throw new Error('Bitbucket Server requires "version" for this function.');let o={reviewers:n.map(i=>{if(i.username)throw new Error('Bitbucket Server reviewer requires "username" for this function.');return{user:{name:i.username}}}),version:t.version};if(!(await this.config.request({method:"PUT",url:`${this.getBaseUrl(e)}/projects/${t.repository.owner.login}/repos/${t.repository.name}/pull-requests/${t.id}`,body:JSON.stringify(o),headers:{...this.getRequestHeaders(e),"Content-Type":"application/json"}})).body.title)throw new Error("Could not set pull request reviewers")}};var St=require("js-base64");var le=(e=>(e.Open="OPEN",e.Closed="CLOSED",e))(le||{});var Vt={AS_CODE_OWNER:[3,0,0],CHECK_RUN:[3,0,0],LATEST_REVIEWS:[3,0,0],VIEWER_CAN_MERGE_AS_ADMIN:[3,5,0]},It=15,Rt=100,E=r=>!!r,pe=(r,s)=>{let e=Vt[s];for(let t=0;t<3;t++){if(r[t]>e[t])return!0;if(r[t]<e[t])return!1}return!0},ce="https://api.github.com",Xt=`${ce}/graphql`,ge=`
|
|
2
|
+
description
|
|
3
|
+
dueOn
|
|
4
|
+
id
|
|
5
|
+
number
|
|
6
|
+
state
|
|
7
|
+
title
|
|
8
|
+
url
|
|
9
|
+
`,Zt=`
|
|
10
|
+
... on CheckRun {
|
|
11
|
+
completedAt
|
|
12
|
+
conclusion
|
|
13
|
+
name
|
|
14
|
+
status
|
|
15
|
+
permalink
|
|
16
|
+
startedAt
|
|
17
|
+
}
|
|
18
|
+
`,de=/\/api\/v\d+$/,me=`
|
|
19
|
+
color
|
|
20
|
+
description
|
|
21
|
+
id
|
|
22
|
+
name
|
|
23
|
+
`,bt=r=>{if(r.endsWith("/api/graphql"))throw new Error("The graphql endpoint is being used as the baseUrl. This package uses both GraphQL and REST APIs, and the REST version cannot be assumed. Use the REST endpoint as the baseUrl instead.")},Yt=(r,s)=>{let e=s.baseUrl||r.baseUrl;return e?(e=e.replace(/\/$/,""),bt(e),de.test(e)&&(e=e.replace(de,"")),`${e}/api/graphql`):Xt},re=(r,s)=>{let e=s.baseUrl||r.baseUrl;return e?(e=e.replace(/\/$/,""),bt(e),de.test(e)&&(e=e.replace(de,"")),`${e}/api/v3`):ce},R=(r,s,e)=>{let t=I(e.token||r.token);return t["X-Github-Next-Global-ID"]="1",t["Content-Type"]="application/json",t.Accept="application/vnd.github.merge-info-preview+json",r.request({url:Yt(r,e),method:"POST",headers:t,body:JSON.stringify(s)})},er={user:!0,"user:email":!0,"read:user":!0},x=r=>r.some(s=>er[s]),U=(r=!1,s=!1,e)=>`
|
|
24
|
+
__typename
|
|
25
|
+
${Q(e,["graphQLId"],"id")}
|
|
26
|
+
${Q(e,["id"],"databaseId")}
|
|
27
|
+
${Q(e,["name"],"name")}
|
|
28
|
+
${Q(e,["name","username"],"login")}
|
|
29
|
+
${s?Q(e,["email"],"email"):""}
|
|
30
|
+
${Q(e,["avatarUrl"],`avatarUrl${r?"(size: $avatarSize)":""}`)}
|
|
31
|
+
${Q(e,["url"],"url")}
|
|
32
|
+
`,tr=(r=!1)=>`
|
|
33
|
+
latestReviews(first: 100) {
|
|
34
|
+
nodes {
|
|
35
|
+
author {
|
|
36
|
+
... on User {
|
|
37
|
+
${U(!1,r)}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
state
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
`,yt=(r=!1)=>`
|
|
44
|
+
__typename
|
|
45
|
+
id
|
|
46
|
+
databaseId
|
|
47
|
+
login
|
|
48
|
+
avatarUrl${r?"(size: $avatarSize)":""}
|
|
49
|
+
url
|
|
50
|
+
`,he=(r,s=!1,e)=>`
|
|
51
|
+
id
|
|
52
|
+
databaseId
|
|
53
|
+
number
|
|
54
|
+
title
|
|
55
|
+
state
|
|
56
|
+
author {
|
|
57
|
+
... on User {
|
|
58
|
+
${U(!1,s)}
|
|
59
|
+
}
|
|
60
|
+
... on Bot {
|
|
61
|
+
${yt(!1)}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
commits(last: 1) {
|
|
65
|
+
totalCount
|
|
66
|
+
nodes {
|
|
67
|
+
commit {
|
|
68
|
+
... on Commit {
|
|
69
|
+
oid
|
|
70
|
+
statusCheckRollup {
|
|
71
|
+
contexts(first: 100) {
|
|
72
|
+
totalCount
|
|
73
|
+
nodes {
|
|
74
|
+
${!e||pe(e,"CHECK_RUN")?Zt:""}
|
|
75
|
+
... on StatusContext {
|
|
76
|
+
context
|
|
77
|
+
createdAt
|
|
78
|
+
description
|
|
79
|
+
state
|
|
80
|
+
targetUrl
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
baseRef {
|
|
90
|
+
name
|
|
91
|
+
target {
|
|
92
|
+
oid
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
headRef {
|
|
96
|
+
name
|
|
97
|
+
target {
|
|
98
|
+
oid
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
repository {
|
|
102
|
+
id
|
|
103
|
+
databaseId
|
|
104
|
+
name
|
|
105
|
+
owner {
|
|
106
|
+
login
|
|
107
|
+
}
|
|
108
|
+
url
|
|
109
|
+
sshUrl
|
|
110
|
+
viewerPermission
|
|
111
|
+
}
|
|
112
|
+
headRepository {
|
|
113
|
+
id
|
|
114
|
+
databaseId
|
|
115
|
+
name
|
|
116
|
+
owner {
|
|
117
|
+
login
|
|
118
|
+
}
|
|
119
|
+
url
|
|
120
|
+
sshUrl
|
|
121
|
+
}
|
|
122
|
+
${r?"isDraft":""}
|
|
123
|
+
url
|
|
124
|
+
createdAt
|
|
125
|
+
comments {
|
|
126
|
+
totalCount
|
|
127
|
+
}
|
|
128
|
+
reactions(content: THUMBS_UP) {
|
|
129
|
+
totalCount
|
|
130
|
+
}
|
|
131
|
+
updatedAt
|
|
132
|
+
closedAt
|
|
133
|
+
mergedAt
|
|
134
|
+
assignees(first: 100) {
|
|
135
|
+
nodes {
|
|
136
|
+
${U(!1,s)}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
reviewRequests(first: 100) {
|
|
140
|
+
nodes {
|
|
141
|
+
${!e||pe(e,"AS_CODE_OWNER")?"asCodeOwner":""}
|
|
142
|
+
requestedReviewer {
|
|
143
|
+
... on User {
|
|
144
|
+
${U(!1,s)}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
${!e||pe(e,"LATEST_REVIEWS")?tr(s):""}
|
|
150
|
+
additions
|
|
151
|
+
deletions
|
|
152
|
+
changedFiles
|
|
153
|
+
mergeable
|
|
154
|
+
mergeStateStatus
|
|
155
|
+
milestone {
|
|
156
|
+
${ge}
|
|
157
|
+
}
|
|
158
|
+
labels(first: 100) {
|
|
159
|
+
nodes {
|
|
160
|
+
${me}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
${!e||pe(e,"VIEWER_CAN_MERGE_AS_ADMIN")?"viewerCanMergeAsAdmin":""}
|
|
164
|
+
`,rr=(r=!1)=>`
|
|
165
|
+
id
|
|
166
|
+
databaseId
|
|
167
|
+
title
|
|
168
|
+
author {
|
|
169
|
+
... on User {
|
|
170
|
+
${U(!1,r)}
|
|
171
|
+
}
|
|
172
|
+
... on Bot {
|
|
173
|
+
${yt(!1)}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
closedAt
|
|
177
|
+
createdAt
|
|
178
|
+
number
|
|
179
|
+
updatedAt
|
|
180
|
+
url
|
|
181
|
+
reactions(content: THUMBS_UP) {
|
|
182
|
+
totalCount
|
|
183
|
+
}
|
|
184
|
+
repository {
|
|
185
|
+
databaseId
|
|
186
|
+
id
|
|
187
|
+
name
|
|
188
|
+
owner {
|
|
189
|
+
login
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
comments {
|
|
193
|
+
totalCount
|
|
194
|
+
}
|
|
195
|
+
assignees(first: 100) {
|
|
196
|
+
nodes {
|
|
197
|
+
${U(!1,r)}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
state
|
|
201
|
+
milestone {
|
|
202
|
+
${ge}
|
|
203
|
+
}
|
|
204
|
+
labels(first: 100) {
|
|
205
|
+
nodes {
|
|
206
|
+
${me}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
`,sr={"-linked":"-linked",archived:"archived",assignee:"assignee",author:"author",base:"base",closed:"closed",commenter:"commenter",comments:"comments",created:"created",draft:"draft",head:"head",label:"label",language:"language",linked:"linked",in:"in",interactions:"interactions",involves:"involves",is:"is",mentions:"mentions",merged:"merged",milestone:"milestone",no:"no",org:"org",project:"project",reactions:"reactions",repo:"repo",review:"review","reviewed-by":"reviewed-by","review-requested":"review-requested",state:"state",status:"status",team:"team","team-review-requested":"team-review-requested",type:"type",updated:"updated",user:"user","user-review-requested":"user-review-requested"},nr=new RegExp('(([^\\s]+:)?\\"(?:[^\\"\\\\]|\\\\.)*\\"?)|([^\\"\\s]+)',"g"),xe=r=>{let s=[];return(r.match(nr)??[]).forEach(t=>{if(t.includes(":")&&t!="is:closed"){let n=t.split(":")[0];sr[n]&&s.push(t)}}),s},ke=(r,s,e,t)=>{let n=r==="issue";return{query:`
|
|
210
|
+
query SearchIssuesOrPullRequests($query: String! $after: String) {
|
|
211
|
+
search(type:ISSUE query:$query first: ${t.maxPageSize} after:$after) {
|
|
212
|
+
pageInfo {
|
|
213
|
+
hasNextPage
|
|
214
|
+
endCursor
|
|
215
|
+
}
|
|
216
|
+
nodes {
|
|
217
|
+
... on ${n?"Issue":"PullRequest"} {
|
|
218
|
+
${n?rr(t.supportsEmail):he(t.supportsDrafts??!1,t.supportsEmail,t.enterpriseVersion??null)}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}`,variables:{query:`is:${r} is:open ${t.includeFromArchivedRepos?"":"archived:false"} ${s}`,after:e}}},or="Field 'isDraft' doesn't exist on type 'PullRequest'",fe=(r=[])=>r.some(s=>(s==null?void 0:s.message)===or),ar=/@@ -(\d+)(?:,\d+ | )\+(\d+)(?:,\d+ | )@@(?:\\n)?/,ir=`
|
|
223
|
+
\
|
|
224
|
+
+`,wt=(r,s,e,t)=>{let n=ar.exec(r);if(!n||!n[0]||!n[1])return[];let o=parseInt(n[1],10),a=parseInt(n[2],10),i=r.replace(ir,`
|
|
225
|
+
+`).split(`
|
|
226
|
+
`).slice(1),u=o-1,l=a-1,p=i.map(g=>{let m,h;switch(g[0]){case"-":{m="DELETED",u+=1,h=`${g.slice(1)}
|
|
227
|
+
`;break}case"+":{m="ADDED",l+=1,h=`${g.slice(1)}
|
|
228
|
+
`;break}default:m="UNMODIFIED",l+=1,u+=1,h=`${g}
|
|
229
|
+
`}return{line:h,oldLineNumber:m!=="ADDED"?u:null,newLineNumber:m!=="DELETED"?l:null,type:m}}),d=e,c=s;if(d!==null&&c!==null&&t!==null&&d<c){let g=0,m=p.length,h=t==="LEFT"?"oldLineNumber":"newLineNumber";for(let b=0;b<p.length;b++){let f=p[b][h];f===d?g=b:f===c&&(m=b)}p=p.slice(g,m+1)}return p};var Ne=`
|
|
230
|
+
id
|
|
231
|
+
databaseId
|
|
232
|
+
owner {
|
|
233
|
+
login
|
|
234
|
+
}
|
|
235
|
+
name
|
|
236
|
+
url
|
|
237
|
+
sshUrl
|
|
238
|
+
defaultBranchRef {
|
|
239
|
+
name
|
|
240
|
+
}
|
|
241
|
+
viewerPermission
|
|
242
|
+
`,_e={__typename:"User",id:"U_kgDNJ5k",databaseId:10137,name:"Deleted user",login:"ghost",email:"",avatarUrl:"https://avatars.githubusercontent.com/u/10137?v=4",url:"https://github.com/ghost"},ur={APPROVED:"APPROVED",CHANGES_REQUESTED:"CHANGES_REQUESTED",COMMENTED:"COMMENTED",REVIEW_REQUESTED:"REVIEW_REQUESTED"},lr={MERGEABLE:"MERGEABLE",CONFLICTING:"CONFLICTS",UNKNOWN:"UNKNOWN"},pr={BEHIND:"BEHIND",BLOCKED:"BLOCKED",UNKNOWN:"UNKNOWN_AND_BLOCKED",UNSTABLE:"UNSTABLE",CLEAN:null,DIRTY:null,DRAFT:null,HAS_HOOKS:null},dr={OPEN:"OPEN",CLOSED:"CLOSED"},cr=["ADMIN","MAINTAIN","TRIAGE","WRITE"],Be=r=>({color:`#${r.color}`,description:r.description,graphQLId:r.id,id:null,name:r.name}),Fe=r=>({id:r.databaseId.toString(),graphQLId:r.id,namespace:r.owner.login,name:r.name,webUrl:r.url,httpsUrl:r.url.endsWith(".git")?r.url:`${r.url}.git`,sshUrl:r.sshUrl,defaultBranch:r.defaultBranchRef,permission:r.viewerPermission}),Pt=r=>{let s=null;return r.permissions.admin?s="ADMIN":r.permissions.maintain?s="MAINTAIN":r.permissions.push?s="WRITE":r.permissions.triage?s="TRIAGE":r.permissions.pull&&(s="READ"),{id:r.id.toString(),graphQLId:r.node_id,namespace:r.owner.login,name:r.name,webUrl:r.html_url,httpsUrl:r.clone_url,sshUrl:r.ssh_url,defaultBranch:{name:r.default_branch},permission:s}},gr={OPEN:"OPEN",CLOSED:"CLOSED",MERGED:"MERGED"},mr={id:!0,graphQLId:!0,name:!0,username:!0,email:!0,avatarUrl:!0,url:!0},$=(r,s=mr)=>{let e={};return s.id&&(e.id=r.databaseId.toString()),s.graphQLId&&(e.graphQLId=r.id),s.name&&(e.name=r.name??r.login),s.username&&(e.username=r.login),s.email&&(e.email=r.email??null),s.avatarUrl&&(e.avatarUrl=r.avatarUrl),s.url&&(e.url=r.url),e},hr=(r,s)=>{let e={IN_PROGRESS:"RUNNING",PENDING:"PENDING",QUEUED:"PENDING",REQUESTED:"PENDING",WAITING:"PENDING"};return r!=="COMPLETED"?e[r]:{ACTION_REQUIRED:"ACTION_REQUIRED",CANCELLED:"CANCELLED",FAILURE:"FAILED",NEUTRAL:null,SKIPPED:"SKIPPED",STALE:"FAILED",STARTUP_FAILURE:"FAILED",SUCCESS:"SUCCESS",TIMED_OUT:"ERROR"}[s]},fr=r=>({ERROR:"ERROR",EXPECTED:"PENDING",FAILURE:"FAILED",PENDING:"PENDING",SUCCESS:"SUCCESS"})[r],Qe=r=>{var a,i,u,l,p,d,c,g,m,h,b,S;let s=null;r.author?s=(r.author.__typename==="Bot",r.author):s=_e;let e=(((a=r.reviewRequests)==null?void 0:a.nodes)||[]).filter(E).filter(f=>!f.asCodeOwner),t=(i=r.headRepository)==null?void 0:i.url;t&&!t.endsWith(".git")&&(t=`${t}.git`);let n=(u=r.repository)==null?void 0:u.url;n&&!n.endsWith(".git")&&(n=`${n}.git`);let o=e.filter(f=>f.requestedReviewer&&"__typename"in f.requestedReviewer).map(f=>({reviewer:$(f.requestedReviewer),state:"REVIEW_REQUESTED"})).concat((((l=r.latestReviews)==null?void 0:l.nodes)||[]).filter(E).map(f=>{let P=_e;return f.author&&Object.keys(f.author).length>0&&(P=f.author),{reviewer:$(P),state:ur[f.state]}}));return{id:r.databaseId.toString(),graphQLId:r.id,title:r.title,number:r.number,state:gr[r.state],commentCount:r.comments.totalCount,upvoteCount:r.reactions.totalCount,author:s?$(s):null,createdDate:new Date(r.createdAt),isDraft:r.isDraft,repository:{id:r.repository.databaseId,graphQLId:r.repository.id,name:r.repository.name,owner:{login:r.repository.owner.login},remoteInfo:{cloneUrlHTTPS:n,cloneUrlSSH:r.repository.sshUrl}},headRepository:r.headRepository?{id:r.headRepository.databaseId,graphQLId:r.headRepository.id,name:r.headRepository.name,owner:{login:r.headRepository.owner.login},remoteInfo:{cloneUrlHTTPS:t,cloneUrlSSH:r.headRepository.sshUrl}}:null,headCommit:{buildStatuses:((g=(c=(d=(p=r.commits.nodes)==null?void 0:p.filter(E)[0])==null?void 0:d.commit.statusCheckRollup)==null?void 0:c.contexts.nodes)==null?void 0:g.filter(E).map(f=>"context"in f?{completedAt:null,description:f.description,name:f.context,state:fr(f.state),startedAt:new Date(f.createdAt),stage:null,url:f.targetUrl}:{completedAt:f.completedAt?new Date(f.completedAt):null,description:null,name:f.name,state:hr(f.status,f.conclusion),startedAt:f.startedAt?new Date(f.startedAt):null,stage:null,url:f.permalink}))??[]},headRef:r.headRef?{name:r.headRef.name,oid:((m=r.headRef.target)==null?void 0:m.oid)??null}:null,baseRef:r.baseRef?{name:r.baseRef.name,oid:((h=r.baseRef.target)==null?void 0:h.oid)??null}:null,url:r.url,updatedDate:new Date(r.updatedAt),closedDate:r.closedAt?new Date(r.closedAt):null,mergedDate:r.mergedAt?new Date(r.mergedAt):null,assignees:r.assignees.nodes?r.assignees.nodes.filter(E).map(f=>$(f)):null,reviews:o,reviewDecision:F(o),additions:r.additions,deletions:r.deletions,fileCount:r.changedFiles,commitCount:r.commits.totalCount,mergeableState:pr[r.mergeStateStatus]??lr[r.mergeable],milestone:r.milestone?je(r.milestone):null,labels:((S=(b=r.labels)==null?void 0:b.nodes)==null?void 0:S.filter(E).map(Be))??[],permissions:{canMerge:cr.includes(r.repository.viewerPermission),canMergeAndBypassProtections:r.viewerCanMergeAsAdmin??!1}}},Ir=r=>{var h,b;let{comments:s,isOutdated:e,isResolved:t,originalLine:n,originalStartLine:o,startDiffSide:a}=r,i=(h=s.nodes)==null?void 0:h[0];if(!i)return null;let{author:u,body:l,databaseId:p,id:d,path:c,publishedAt:g,url:m}=i;return{author:u?{avatarUrl:u.avatarUrl,email:null,name:u.login}:null,body:l,createdAt:g?new Date(g):null,diffLines:wt(i.diffHunk,n,o,a),id:p,isOutdated:e,isResolved:t,graphQLId:d,filename:c,replies:((b=s.nodes)==null?void 0:b.filter(E).slice(1).map(Rr))??[],url:m}},Rr=r=>({author:r.author?{avatarUrl:r.author.avatarUrl,email:null,name:r.author.login}:null,body:r.body,createdAt:r.publishedAt?new Date(r.publishedAt):null,graphQLId:r.id,id:r.databaseId,url:r.url}),br=r=>{var e,t,n;let s=null;return r.author?s=(r.author.__typename==="Bot",r.author):s=_e,{id:r.databaseId.toString(),graphQLId:r.id,number:r.number,title:r.title,author:$(s),commentCount:r.comments.totalCount,closedDate:r.closedAt?new Date(r.closedAt):null,createdDate:new Date(r.createdAt),description:null,state:{name:dr[r.state],color:null},type:null,repository:{id:r.repository.databaseId,graphQLId:r.repository.id,name:r.repository.name,owner:{login:r.repository.owner.login}},url:r.url,updatedDate:new Date(r.updatedAt),assignees:((e=r.assignees.nodes)==null?void 0:e.filter(E).map(o=>$(o)))??[],upvoteCount:r.reactions.totalCount,milestone:r.milestone?je(r.milestone):null,labels:((n=(t=r.labels)==null?void 0:t.nodes)==null?void 0:n.filter(E).map(Be))??[]}},je=r=>({id:r.number.toString(),graphQLId:r.id.toString(),number:r.number,title:r.title,description:r.description,isOpen:r.state=="OPEN",url:r.url,startDate:null,dueDate:r.dueOn?new Date(r.dueOn):null}),V=class extends G{constructor(){super(...arguments);this._scopesCache={};this._enterpriseVersionsCache={}}async getScopes(e){let t=e.token||this.config.token;if(!t)return[];let n=this._scopesCache[t];if(!n){let a=(await R(this.config,{query:"query { rateLimit(dryRun: true) { __typename } }"},e)).headers["x-oauth-scopes"];n=a?a.split(", "):[],this._scopesCache[t]=n}return n}async getEnterpriseVersion(e){let t=e.baseUrl||this.config.baseUrl;if(!t)return null;let n=this._enterpriseVersionsCache[t];if(!n){let o=await this.config.request({url:`${re(this.config,e)}/meta`,headers:I(e.token||this.config.token)});if(!o.body.installed_version)return null;n=o.body.installed_version.split(".").slice(0,3).map(a=>parseInt(a,10)),this._enterpriseVersionsCache[t]=n}return n}getEnterpriseAvatarUrlIfNeeded(e,t,n){let o=n.baseUrl||this.config.baseUrl;return!o||o.startsWith(ce)?e:t?`https://avatars.githubusercontent.com/u/e?email=${encodeURIComponent(t)}`:""}async getCurrentUser(e={},t={}){var u;if(e.fields&&!e.fields.length)throw new Error('"fields" must contain at least one field or be omitted');let n=lt(e.fields),o=await this.getScopes(t),i=(u=(await R(this.config,{query:`
|
|
243
|
+
query getCurrentUser {
|
|
244
|
+
viewer {
|
|
245
|
+
${U(!1,x(o),n)}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
`},t)).body.data)==null?void 0:u.viewer;if(!i)throw new Error("Current user not found.");return{data:$(i,n)}}async getAccountsForRepo(e,t={}){var l,p,d,c,g,m;let n=await this.getScopes(t),{repo:{namespace:o,name:a},cursor:i}=e,u=await R(this.config,{query:`
|
|
249
|
+
query getAccountsForRepo($owner: String!, $name: String! $cursor: String, $first: Int!) {
|
|
250
|
+
repository(owner: $owner, name: $name) {
|
|
251
|
+
assignableUsers(first: $first, after: $cursor) {
|
|
252
|
+
nodes {
|
|
253
|
+
${U(!1,x(n))}
|
|
254
|
+
}
|
|
255
|
+
pageInfo {
|
|
256
|
+
endCursor
|
|
257
|
+
hasNextPage
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
`,variables:{owner:o,name:a,cursor:i,first:q}},t);if(!u.body.data)throw new Error(((l=u.body.errors)==null?void 0:l[0].message)||u.statusText||"Unknown error");return{pageInfo:((d=(p=u.body.data.repository)==null?void 0:p.assignableUsers)==null?void 0:d.pageInfo)??{endCursor:null,hasNextPage:!1},data:((m=(g=(c=u.body.data.repository)==null?void 0:c.assignableUsers)==null?void 0:g.nodes)==null?void 0:m.map(h=>$(h)))??[]}}async getUserForCommit(e,t={}){var i,u;let o=(i=(await R(this.config,{query:`
|
|
263
|
+
query getUserForCommit(
|
|
264
|
+
$owner: String!
|
|
265
|
+
$name: String!
|
|
266
|
+
$oid: GitObjectID!
|
|
267
|
+
$avatarSize: Int
|
|
268
|
+
) {
|
|
269
|
+
repository(owner: $owner, name: $name) {
|
|
270
|
+
object(oid: $oid) {
|
|
271
|
+
... on Commit {
|
|
272
|
+
author {
|
|
273
|
+
name
|
|
274
|
+
email
|
|
275
|
+
avatarUrl(size: $avatarSize)
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
`,variables:{owner:e.repo.namespace,name:e.repo.name,oid:e.oid,avatarSize:e.avatarSize}},t)).body.data)==null?void 0:i.repository;if(!o)throw new Error("Repository not found.");let a=(u=o.object)==null?void 0:u.author;if(!a)throw new Error("Commit not found.");return{data:{name:a.name,email:a.email,avatarUrl:this.getEnterpriseAvatarUrlIfNeeded(a.avatarUrl,a.email,t)}}}async createCommit(e,t={}){var p;let{commitMessage:n,deletedFiles:o,newOrModifiedFiles:a,repo:i,target:u}=e,l=await R(this.config,{query:`
|
|
282
|
+
mutation createCommitOnBranch(
|
|
283
|
+
$branchName: String!,
|
|
284
|
+
$expectedHeadOid: GitObjectID!,
|
|
285
|
+
$fileChanges: FileChanges!,
|
|
286
|
+
$message: CommitMessage!,
|
|
287
|
+
$repositoryNameWithOwner: String!,
|
|
288
|
+
) {
|
|
289
|
+
createCommitOnBranch(input: {
|
|
290
|
+
branch: {
|
|
291
|
+
branchName: $branchName,
|
|
292
|
+
repositoryNameWithOwner: $repositoryNameWithOwner,
|
|
293
|
+
},
|
|
294
|
+
expectedHeadOid: $expectedHeadOid,
|
|
295
|
+
fileChanges: $fileChanges,
|
|
296
|
+
message: $message
|
|
297
|
+
}) {
|
|
298
|
+
commit {
|
|
299
|
+
authoredDate
|
|
300
|
+
committedDate
|
|
301
|
+
oid
|
|
302
|
+
}
|
|
303
|
+
ref {
|
|
304
|
+
name
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
`,variables:{branchName:u.name,expectedHeadOid:u.oid,fileChanges:{additions:Object.entries(a).map(([d,c])=>({contents:St.Base64.encode(c),path:d})),deletions:o.map(d=>({path:d}))},message:{body:n.description,headline:n.summary},repositoryNameWithOwner:`${i.namespace}/${i.name}`}},t);if((p=l.body.errors)!=null&&p[0])throw new Error(l.body.errors[0].message);if(!l.body.data)throw new Error("Could not create commit");return{data:{name:l.body.data.createCommitOnBranch.ref.name,commit:{authoredDate:new Date(l.body.data.createCommitOnBranch.commit.authoredDate),committedDate:new Date(l.body.data.createCommitOnBranch.commit.committedDate),oid:l.body.data.createCommitOnBranch.commit.oid}}}}async getAccountForEmail(e,t={}){var i,u,l;let n=await this.getScopes(t),a=(l=(u=(i=(await R(this.config,{query:`
|
|
309
|
+
query getAccountForEmail($query: String! $avatarSize: Int) {
|
|
310
|
+
search(query: $query, type: USER, first: 1) {
|
|
311
|
+
nodes {
|
|
312
|
+
... on User {
|
|
313
|
+
${U(!0,x(n))}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
`,variables:{query:`in:email ${e.email}`,avatarSize:e.avatarSize}},t)).body.data)==null?void 0:i.search)==null?void 0:u.nodes)==null?void 0:l[0];if(!a)throw new Error("User not found.");return{data:$({...a,avatarUrl:this.getEnterpriseAvatarUrlIfNeeded(a.avatarUrl,a.email,t)})}}async getAccountForUsername(e,t={}){var i;let n=await this.getScopes(t),a=(i=(await R(this.config,{query:`
|
|
319
|
+
query getUserForUsername($login: String! $avatarSize: Int) {
|
|
320
|
+
user(login: $login) {
|
|
321
|
+
${U(!0,x(n))}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
`,variables:{login:e.username,avatarSize:e.avatarSize}},t)).body.data)==null?void 0:i.user;if(!a)throw new Error("User not found.");return{data:$({...a,avatarUrl:this.getEnterpriseAvatarUrlIfNeeded(a.avatarUrl,a.email,t)})}}async getOrgsForCurrentUser(e={},t={}){var a;let n=await R(this.config,{query:`
|
|
325
|
+
query getOrgsForCurrentUser($cursor: String, $first: Int!) {
|
|
326
|
+
viewer {
|
|
327
|
+
organizations(first: $first after: $cursor) {
|
|
328
|
+
pageInfo {
|
|
329
|
+
endCursor
|
|
330
|
+
hasNextPage
|
|
331
|
+
}
|
|
332
|
+
nodes {
|
|
333
|
+
id
|
|
334
|
+
databaseId
|
|
335
|
+
name
|
|
336
|
+
login
|
|
337
|
+
email
|
|
338
|
+
avatarUrl
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
`,variables:{cursor:e.cursor,first:q}},t);if(!n.body.data)throw new Error(((a=n.body.errors)==null?void 0:a[0].message)||n.statusText||"Unknown error");let o=n.body.data.viewer.organizations.nodes||[];return{pageInfo:n.body.data.viewer.organizations.pageInfo,data:o.map(i=>({id:i.databaseId.toString(),graphQLId:i.id,username:i.login,name:i.name||null,email:i.email||null,avatarUrl:i.avatarUrl}))}}async getOrgMembers(e,t={}){var a,i,u;let n=await R(this.config,{query:`
|
|
344
|
+
query getOrgMember($cursor: String, $first: Int!, $login: String!) {
|
|
345
|
+
viewer {
|
|
346
|
+
organization(login: $login) {
|
|
347
|
+
membersWithRole(first: $first after: $cursor) {
|
|
348
|
+
pageInfo {
|
|
349
|
+
endCursor
|
|
350
|
+
hasNextPage
|
|
351
|
+
}
|
|
352
|
+
nodes {
|
|
353
|
+
${U(!1,!0)}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
`,variables:{cursor:e.cursor,first:q,login:e.org}},t);if(!n.body.data)throw new Error(((a=n.body.errors)==null?void 0:a[0].message)||n.statusText||"Unknown error");if(!((u=(i=n.body.data)==null?void 0:i.viewer.organization)!=null&&u.membersWithRole))throw new Error("Could not read the members of the organization");let o=n.body.data.viewer.organization.membersWithRole.nodes||[];return{pageInfo:n.body.data.viewer.organization.membersWithRole.pageInfo,data:o.map(l=>$({...l,avatarUrl:this.getEnterpriseAvatarUrlIfNeeded(l.avatarUrl,l.email,t)}))}}async getRepo(e,t={}){var o;let n=await R(this.config,{query:`
|
|
360
|
+
query getRepo($owner: String!, $name: String!) {
|
|
361
|
+
repository(owner: $owner, name: $name) {
|
|
362
|
+
${Ne}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
`,variables:{owner:e.namespace,name:e.name}},t);if(!((o=n.body.data)!=null&&o.repository))throw new Error(`Repository ${e.namespace}/${e.name} not found`);return{data:Fe(n.body.data.repository)}}async getRepos(e,t={}){let n=e.map(({namespace:u,name:l},p)=>`
|
|
366
|
+
getRepo_${p}: repository(owner: "${u}", name: "${l}") {
|
|
367
|
+
${Ne}
|
|
368
|
+
}
|
|
369
|
+
`).join(`
|
|
370
|
+
`),o=await R(this.config,{query:`
|
|
371
|
+
query batchGetRepos {
|
|
372
|
+
${n}
|
|
373
|
+
}
|
|
374
|
+
`},t);if(!o.body.data)throw new Error(o.statusText||"Unknown error");let a=[],i=[];return e.forEach((u,l)=>{let p=o.body.data[`getRepo_${l}`];p?a.push(Fe(p)):i.push({input:u})}),{data:a,errors:i}}async fetchMultipleRESTPages(e,t,n,o){let a=[];for(let d=0;d<t;d++)a.push(n(e+d));let i=await Promise.all(a),u=[];for(let d of i){if(!d.body)throw new Error(d.statusText||"Unknown error");u=u.concat(d.body.map(c=>o(c)))}let l=i.every(d=>d.body.length===100),p=e+t;return{data:u,pageInfo:{hasNextPage:l,nextPage:l?p:null}}}async getReposForCurrentUser(e,t={}){if(e.simultaneousPagesToFetch&&e.simultaneousPagesToFetch>40)throw new Error("The argument 'simultaneousPagesToFetch' cannot exceed 40 for 'getReposForCurrentUser'");let n=new URLSearchParams;n.append("per_page","100"),e.affiliations&&n.append("affiliation",e.affiliations.join(","));let o=a=>this.config.request({url:`${re(this.config,t)}/user/repos?${n.toString()}&page=${a}`,headers:{...I(t.token||this.config.token),Accept:"application/vnd.github.raw+json"}});return await this.fetchMultipleRESTPages(e.page??1,e.simultaneousPagesToFetch??4,o,Pt)}async getReposForOrg(e,t={}){if(e.simultaneousPagesToFetch&&e.simultaneousPagesToFetch>40)throw new Error("The argument 'simultaneousPagesToFetch' cannot exceed 40 for 'getReposForOrg'");let n=o=>this.config.request({url:`${re(this.config,t)}/orgs/${e.orgName}/repos?per_page=100&page=${o}`,headers:{...I(t.token||this.config.token),Accept:"application/vnd.github.raw+json"}});return await this.fetchMultipleRESTPages(e.page??1,e.simultaneousPagesToFetch??4,n,Pt)}async getReposForUsernames(e,t={}){var a;if(!e.usernames.length)return{pageInfo:{endCursor:null,hasNextPage:!1},data:[]};let n=await R(this.config,{query:`
|
|
375
|
+
query getReposForUsernames($query: String!, $cursor: String, $first: Int!) {
|
|
376
|
+
search(query: $query, type: REPOSITORY, first: $first, after: $cursor) {
|
|
377
|
+
pageInfo {
|
|
378
|
+
endCursor
|
|
379
|
+
hasNextPage
|
|
380
|
+
}
|
|
381
|
+
nodes {
|
|
382
|
+
... on Repository {
|
|
383
|
+
${Ne}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
`,variables:{query:`fork:true ${e.usernames.map(i=>`user:${i}`).join(" ")}`,cursor:e.cursor,first:q}},t);if(!n.body.data)throw new Error(((a=n.body.errors)==null?void 0:a[0].message)||n.statusText||"Unknown error");let o=n.body.data.search.nodes||[];return{pageInfo:n.body.data.search.pageInfo,data:o.map(Fe)}}async getReposForOwners(e,t={}){return this.getReposForUsernames({usernames:e.owners.filter(n=>n.username).map(n=>n.username),cursor:e.cursor},t)}async getRefs(e,t,n={}){var u;let a=(u=(await R(this.config,{query:`
|
|
389
|
+
query getRefs($owner: String!, $name: String!, $refPrefix: String!, $cursor: String, $first: Int!) {
|
|
390
|
+
repository(owner: $owner, name: $name) {
|
|
391
|
+
refs(refPrefix: $refPrefix first: $first after: $cursor) {
|
|
392
|
+
pageInfo {
|
|
393
|
+
endCursor
|
|
394
|
+
hasNextPage
|
|
395
|
+
}
|
|
396
|
+
nodes {
|
|
397
|
+
name
|
|
398
|
+
target {
|
|
399
|
+
... on Commit {
|
|
400
|
+
oid
|
|
401
|
+
authoredDate
|
|
402
|
+
committedDate
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
`,variables:{owner:t.repo.namespace,name:t.repo.name,refPrefix:e,cursor:t.cursor,first:q}},n)).body.data)==null?void 0:u.repository;if(!a)throw new Error("Repository not found.");let i=a.refs;return i?{pageInfo:i.pageInfo,data:(i.nodes||[]).map(l=>{var d;let p=(d=l.target)!=null&&d.oid?l.target:null;return{name:l.name,commit:p?{oid:p.oid,authoredDate:new Date(p.authoredDate),committedDate:new Date(p.committedDate)}:null}})}:{pageInfo:{endCursor:null,hasNextPage:!1},data:[]}}async getBranches(e,t={}){return this.getRefs("refs/heads/",e,t)}async getTags(e,t={}){return this.getRefs("refs/tags/",e,t)}async getBlame(e,t={}){var i;let o=(i=(await R(this.config,{query:`
|
|
410
|
+
query getBlame($owner: String!, $name: String!, $ref: String!, $path: String!) {
|
|
411
|
+
repository(owner: $owner, name: $name) {
|
|
412
|
+
object(expression: $ref) {
|
|
413
|
+
... on Commit {
|
|
414
|
+
blame(path: $path) {
|
|
415
|
+
ranges {
|
|
416
|
+
startingLine
|
|
417
|
+
endingLine
|
|
418
|
+
commit {
|
|
419
|
+
oid
|
|
420
|
+
parents(first:100) {
|
|
421
|
+
nodes {
|
|
422
|
+
oid
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
authoredDate
|
|
426
|
+
committedDate
|
|
427
|
+
message
|
|
428
|
+
author {
|
|
429
|
+
name
|
|
430
|
+
email
|
|
431
|
+
avatarUrl
|
|
432
|
+
}
|
|
433
|
+
committer {
|
|
434
|
+
name
|
|
435
|
+
email
|
|
436
|
+
avatarUrl
|
|
437
|
+
}
|
|
438
|
+
additions
|
|
439
|
+
deletions
|
|
440
|
+
changedFilesIfAvailable
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
`,variables:{owner:e.repo.namespace,name:e.repo.name,ref:e.ref,path:e.path}},t)).body.data)==null?void 0:i.repository;if(!o)throw new Error("Repository not found.");let a=o.object;if(!a||!("blame"in a))throw new Error("Ref not found.");if(a.blame.ranges.length===0)throw new Error("File not found.");return{data:{ranges:a.blame.ranges.map(u=>{var l;return{startingLine:u.startingLine,endingLine:u.endingLine,commit:{oid:u.commit.oid,parentOids:((l=u.commit.parents.nodes)==null?void 0:l.map(p=>p.oid))||[],authoredDate:new Date(u.commit.authoredDate),author:u.commit.author?{name:u.commit.author.name,email:u.commit.author.email,avatarUrl:u.commit.author.avatarUrl}:null,committedDate:new Date(u.commit.committedDate),committer:u.commit.committer?{name:u.commit.committer.name,email:u.commit.committer.email,avatarUrl:u.commit.committer.avatarUrl}:null,message:u.commit.message,fileCount:u.commit.changedFilesIfAvailable,additions:u.commit.additions,deletions:u.commit.deletions}}})}}}async getFileContents(e,t={}){let n=await this.config.request({url:`${re(this.config,t)}/repos/${e.repo.namespace}/${e.repo.name}/contents/${encodeURIComponent(e.path)}?ref=${e.ref}`,headers:{...I(t.token||this.config.token),Accept:"application/vnd.github.raw+json"}});if(n.headers["content-type"].startsWith("application/json"))throw new Error(`GitHub: got directory when fetching "${e.path}", getFileContents does not support fetching directories`);if(!n.headers["content-type"].startsWith("application/vnd.github.raw+json"))throw new Error(`GitHub: unsupported content type "${n.headers["content-type"]}" when fetching "${e.path}"`);return{data:new Blob([n.body])}}async searchPullRequests(e,t={}){var p,d;let n=await this.getEnterpriseVersion(t),o=await this.getScopes(t),a=x(o),i=c=>{let g=c&&typeof e.isDraft=="boolean"?`${e.query} draft:${e.isDraft}`:e.query;return ke("pr",g,e.cursor,{maxPageSize:e.maxPageSize??It,supportsEmail:a,supportsDrafts:c,enterpriseVersion:n,includeFromArchivedRepos:e.includeFromArchivedRepos})},u=await R(this.config,i(!0),t);u.body.errors&&fe(u.body.errors)&&(this.config.baseUrl||t.baseUrl)&&(u=await R(this.config,i(!1),t));let{data:l}=u.body;if(!l)throw new Error(((p=u.body.errors)==null?void 0:p[0].message)||u.statusText||"Unknown error");return{pageInfo:{hasNextPage:l.search.pageInfo.hasNextPage,endCursor:l.search.pageInfo.endCursor},data:((d=l.search.nodes)==null?void 0:d.filter(E).map(Qe))||[]}}async searchIssues(e,t={}){var u,l;let n=await this.getScopes(t),o=x(n),a=await R(this.config,ke("issue",e.query,e.cursor,{supportsEmail:o,includeFromArchivedRepos:e.includeFromArchivedRepos,maxPageSize:e.maxPageSize??Rt}),t),{data:i}=a.body;if(!i)throw new Error(((u=a.body.errors)==null?void 0:u[0].message)||a.statusText||"Unknown error");return{pageInfo:{hasNextPage:i.search.pageInfo.hasNextPage,endCursor:i.search.pageInfo.endCursor},data:((l=i.search.nodes)==null?void 0:l.filter(E).map(br))||[]}}async getPullRequestsAssociatedWithUser(e,t={}){let n=[`involves:${e.username}`];return e.labelNames&&e.labelNames.forEach(o=>{n.push(`label:"${o}"`)}),this.searchPullRequests({query:n.join(" "),cursor:e.cursor,includeFromArchivedRepos:e.includeFromArchivedRepos,maxPageSize:e.maxPageSize},t)}async getPullRequestsForRepos(e,t={}){let{assigneeLogins:n,updatedBefore:o,authorLogin:a,repos:i,reviewRequestedLogin:u,startQuery:l,mentionLogin:p,labelNames:d,maxPageSize:c}=e,g=xe(l||"");return i.forEach(m=>{g.push(`repo:${m.namespace}/${m.name}`)}),n&&n.forEach(m=>{g.push(`assignee:${m}`)}),o&&g.push(`updated:<${o}`),a&&g.push(`author:${a}`),u&&g.push(`review-requested:${u}`),p&&g.push(`mentions:${p}`),d&&d.forEach(m=>{g.push(`label:"${m}"`)}),this.searchPullRequests({query:`sort:updated ${g.join(" ")}`,isDraft:e.isDraft,cursor:e.cursor,includeFromArchivedRepos:e.includeFromArchivedRepos,maxPageSize:c},t)}async getPullRequestForRepo(e,t={}){var d,c;let n=await this.getEnterpriseVersion(t),o=await this.getScopes(t),a=x(o),i=g=>({query:`query getPullRequest(
|
|
449
|
+
$owner: String!
|
|
450
|
+
$name: String!
|
|
451
|
+
$number: Int!
|
|
452
|
+
) {
|
|
453
|
+
repository(
|
|
454
|
+
owner: $owner,
|
|
455
|
+
name: $name
|
|
456
|
+
) {
|
|
457
|
+
pullRequest(number: $number) {
|
|
458
|
+
${he(g,a,n)}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}`,variables:{owner:e.repo.namespace,name:e.repo.name,number:e.number}}),u=await R(this.config,i(!0),t);u.body.errors&&fe(u.body.errors)&&(this.config.baseUrl||t.baseUrl)&&(u=await R(this.config,i(!1),t));let{data:l}=u.body;if(!l)throw new Error(((d=u.body.errors)==null?void 0:d[0].message)||u.statusText||"Unknown error");let p=(c=u.body.data)==null?void 0:c.repository.pullRequest;return{data:p?Qe(p):null}}async getPullRequestByGraphQLId(e,t={}){var d,c;let n=await this.getEnterpriseVersion(t),o=await this.getScopes(t),a=x(o),i=g=>({query:`query getPullRequest(
|
|
462
|
+
$graphQLId: ID!
|
|
463
|
+
) {
|
|
464
|
+
node(id: $graphQLId) {
|
|
465
|
+
... on PullRequest {
|
|
466
|
+
${he(g,a,n)}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}`,variables:{graphQLId:e.graphQLId}}),u=await R(this.config,i(!0),t);u.body.errors&&fe(u.body.errors)&&(this.config.baseUrl||t.baseUrl)&&(u=await R(this.config,i(!1),t));let{data:l}=u.body;if(!l)throw new Error(((d=u.body.errors)==null?void 0:d[0].message)||u.statusText||"Unknown error");let p=(c=u.body.data)==null?void 0:c.node;return{data:p?Qe(p):null}}async closePullRequest(e,t={}){var i,u,l;let{pullRequest:{graphQLId:n}}=e;if(!n)throw new Error('GitHub requires "graphQLId" for this function.');let o=`mutation ClosePullRequest($pullRequestGraphQLId: ID!) {
|
|
470
|
+
closePullRequest(input: { pullRequestId: $pullRequestGraphQLId }) {
|
|
471
|
+
pullRequest {
|
|
472
|
+
id
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}`;if(!((l=(u=(i=(await R(this.config,{query:`${o}`,variables:{pullRequestGraphQLId:n}},t)).body.data)==null?void 0:i.closePullRequest)==null?void 0:u.pullRequest)!=null&&l.id))throw new Error("Could not close pull request")}async mergePullRequest(e,t={}){var l,p,d,c;let{pullRequest:n,mergeStrategy:o}=e;if(!n.graphQLId)throw new Error('GitHub requires "graphQLId" for this function.');if(!((l=n.headRef)!=null&&l.oid))throw new Error('GitHub requires "headRef.oid" for this function.');let a;switch(o){case"MERGE_COMMIT":{a="MERGE";break}case"REBASE":{a="REBASE";break}case"SQUASH":{a="SQUASH";break}}let i=`mutation MergePullRequest(
|
|
476
|
+
$pullRequestGraphQLId: ID!,
|
|
477
|
+
$expectedSourceSha: GitObjectID!,
|
|
478
|
+
$mergeStrategy: PullRequestMergeMethod,
|
|
479
|
+
) {
|
|
480
|
+
mergePullRequest(input: {
|
|
481
|
+
pullRequestId: $pullRequestGraphQLId,
|
|
482
|
+
expectedHeadOid: $expectedSourceSha,
|
|
483
|
+
mergeMethod: $mergeStrategy,
|
|
484
|
+
}) {
|
|
485
|
+
pullRequest {
|
|
486
|
+
id
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}`;if(!((c=(d=(p=(await R(this.config,{query:`${i}`,variables:{pullRequestGraphQLId:n.graphQLId,expectedSourceSha:n.headRef.oid,mergeStrategy:a}},t)).body.data)==null?void 0:p.mergePullRequest)==null?void 0:d.pullRequest)!=null&&c.id))throw new Error("Could not merge pull request")}async setPullRequestMilestone(e,t={}){var u,l,p;let{pullRequest:n,milestone:o}=e;if(!n.graphQLId)throw new Error('GitHub requires "graphQLId" for this function.');let a=`mutation SetPullRequestMilestone($pullRequestGraphQLId: ID!, $milestoneGraphQLId: ID) {
|
|
490
|
+
updatePullRequest(input: { pullRequestId: $pullRequestGraphQLId, milestoneId: $milestoneGraphQLId }) {
|
|
491
|
+
pullRequest {
|
|
492
|
+
id
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
}`;if(!((p=(l=(u=(await R(this.config,{query:`${a}`,variables:{pullRequestGraphQLId:n.graphQLId,milestoneGraphQLId:(o==null?void 0:o.graphQLId)??null}},t)).body.data)==null?void 0:u.updatePullRequest)==null?void 0:l.pullRequest)!=null&&p.id))throw new Error("Could not set milestone of pull request")}async markPullRequestReadyForReview(e,t){var a,i,u;let n=`mutation MarkReadyToReview($pullRequestGraphQLId: ID!) {
|
|
496
|
+
markPullRequestReadyForReview(input: { pullRequestId: $pullRequestGraphQLId }) {
|
|
497
|
+
pullRequest {
|
|
498
|
+
id
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
}`;if(!((u=(i=(a=(await R(this.config,{query:n,variables:{pullRequestGraphQLId:e}},t)).body.data)==null?void 0:a.markPullRequestReadyForReview)==null?void 0:i.pullRequest)!=null&&u.id))throw new Error("Could not mark pull request ready to review")}async convertPullRequestToDraft(e,t){var a,i,u;let n=`mutation ConvertToDraft($pullRequestGraphQLId: ID!) {
|
|
502
|
+
convertPullRequestToDraft(input: { pullRequestId: $pullRequestGraphQLId }) {
|
|
503
|
+
pullRequest {
|
|
504
|
+
id
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}`;if(!((u=(i=(a=(await R(this.config,{query:n,variables:{pullRequestGraphQLId:e}},t)).body.data)==null?void 0:a.convertPullRequestToDraft)==null?void 0:i.pullRequest)!=null&&u.id))throw new Error("Could not convert pull request to draft")}async setPullRequestAsDraft(e,t={}){let{pullRequest:{graphQLId:n},isDraft:o}=e;if(!n)throw new Error('GitHub requires "graphQLId" for this function.');if(o){await this.convertPullRequestToDraft(n,t);return}await this.markPullRequestReadyForReview(n,t)}async setPullRequestReviewers(e,t={}){var d,c,g;let{pullRequest:{reviews:n,graphQLId:o},reviewers:a}=e;if(!n)throw new Error('GitHub requires "reviews" for this function');if(!o)throw new Error('GitHub requires "graphQLId" for this function.');let i=n.filter(m=>m.state!=="REVIEW_REQUESTED").map(m=>{if(!m.reviewer.graphQLId)throw new Error('GitHub requires reviewer "graphQLId" for this function.');return m.reviewer.graphQLId}),u=a.map(m=>{if(!m.graphQLId)throw new Error('GitHub requires reviewer "graphQLId" for this function.');return m.graphQLId}).filter(m=>i.indexOf(m)===-1),l=`mutation SetPullRequestReviewers($pullRequestGraphQLId: ID!, $reviewerGraphQLIds: [ID!]!) {
|
|
508
|
+
requestReviews(input: { pullRequestId: $pullRequestGraphQLId, userIds: $reviewerGraphQLIds }) {
|
|
509
|
+
pullRequest {
|
|
510
|
+
id
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}`;if(!((g=(c=(d=(await R(this.config,{query:l,variables:{pullRequestGraphQLId:o,reviewerGraphQLIds:u}},t)).body.data)==null?void 0:d.requestReviews)==null?void 0:c.pullRequest)!=null&&g.id))throw new Error("Could not set pull request reviewers")}async reRequestPullRequestReviews(e,t={}){var p,d,c;let{pullRequest:{reviews:n,graphQLId:o},reviewers:a}=e;if(!o)throw new Error('GitHub requires "graphQLId" for this function.');if(!n)throw new Error('GitHub requires "reviews" for this function.');let i=[];for(let g of a){if(!g.graphQLId)throw new Error('GitHub requires reviwer "graphQLId" for this function.');if(!n.find(m=>m.reviewer.graphQLId===g.graphQLId))throw new Error("Can only re-request review from existing reviewer.");i.push(g.graphQLId)}let u=`mutation SetPullRequestReviewers($pullRequestGraphQLId: ID!, $reviewerGraphQLIds: [ID!]!) {
|
|
514
|
+
requestReviews(input: { pullRequestId: $pullRequestGraphQLId, userIds: $reviewerGraphQLIds, union: true }) {
|
|
515
|
+
pullRequest {
|
|
516
|
+
id
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}`;if(!((c=(d=(p=(await R(this.config,{query:u,variables:{pullRequestGraphQLId:o,reviewerGraphQLIds:i}},t)).body.data)==null?void 0:p.requestReviews)==null?void 0:d.pullRequest)!=null&&c.id))throw new Error("Could not re-request pull request reviews")}async setPullRequestAssignees(e,t={}){var l,p,d;let{pullRequest:n,assignees:o}=e;if(!n.graphQLId)throw new Error('GitHub requires "graphQLId" for this function.');let a=o.map(c=>{if(!c.graphQLId)throw new Error('GitHub requires assignee "graphQLId" for this function.');return c.graphQLId}),i=`mutation SetPullRequestAssignees($pullRequestGraphQLId: ID!, $assigneeGraphQLIds: [ID!]!) {
|
|
520
|
+
updatePullRequest(input: { pullRequestId: $pullRequestGraphQLId, assigneeIds: $assigneeGraphQLIds }) {
|
|
521
|
+
pullRequest {
|
|
522
|
+
id
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
}`;if(!((d=(p=(l=(await R(this.config,{query:i,variables:{pullRequestGraphQLId:n.graphQLId,assigneeGraphQLIds:a}},t)).body.data)==null?void 0:l.updatePullRequest)==null?void 0:p.pullRequest)!=null&&d.id))throw new Error("Could not set pull request assignees")}async getReviewsForPullRequest(e,t={}){var d,c,g,m;let{repo:{namespace:n,name:o},pullRequestId:a}=e,i=`query getPullRequests(
|
|
526
|
+
$namespace: String!
|
|
527
|
+
$name: String!
|
|
528
|
+
$pullRequestId: Int!
|
|
529
|
+
) {
|
|
530
|
+
repository(
|
|
531
|
+
owner: $namespace,
|
|
532
|
+
name: $name
|
|
533
|
+
) {
|
|
534
|
+
pullRequest(number: $pullRequestId) {
|
|
535
|
+
reviewThreads(first: 100) {
|
|
536
|
+
nodes {
|
|
537
|
+
isOutdated
|
|
538
|
+
isResolved
|
|
539
|
+
originalLine
|
|
540
|
+
originalStartLine
|
|
541
|
+
startDiffSide
|
|
542
|
+
comments(first: 100) {
|
|
543
|
+
nodes {
|
|
544
|
+
author {
|
|
545
|
+
avatarUrl
|
|
546
|
+
login
|
|
547
|
+
}
|
|
548
|
+
body
|
|
549
|
+
databaseId
|
|
550
|
+
diffHunk
|
|
551
|
+
id
|
|
552
|
+
path
|
|
553
|
+
publishedAt
|
|
554
|
+
pullRequestReview {
|
|
555
|
+
id
|
|
556
|
+
}
|
|
557
|
+
url
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
reviews(first: 100) {
|
|
563
|
+
nodes {
|
|
564
|
+
author {
|
|
565
|
+
avatarUrl
|
|
566
|
+
login
|
|
567
|
+
}
|
|
568
|
+
body
|
|
569
|
+
databaseId
|
|
570
|
+
id
|
|
571
|
+
publishedAt
|
|
572
|
+
url
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
}`,u=await R(this.config,{query:i,variables:{namespace:n,name:o,pullRequestId:a}},t),l=((c=(d=u.body.data)==null?void 0:d.repository.pullRequest.reviewThreads.nodes)==null?void 0:c.filter(E).reduce((h,b)=>{var P,O;if(!((O=(P=b.comments.nodes)==null?void 0:P[0])!=null&&O.pullRequestReview))return h;let S=b.comments.nodes[0].pullRequestReview,f=Ir(b);return f&&(h[S.id]||(h[S.id]=[]),h[S.id].push(f)),h},{}))??{};return{data:((m=(g=u.body.data)==null?void 0:g.repository.pullRequest.reviews.nodes)==null?void 0:m.filter(E).filter(h=>l[h.id]).map(h=>({author:h.author?{avatarUrl:h.author.avatarUrl,email:null,name:h.author.login}:null,body:h.body,createdAt:h.publishedAt?new Date(h.publishedAt):null,id:h.databaseId,graphQLId:h.id,reviewComments:l[h.id],url:h.url})))??[]}}async getIssuesAssociatedWithUser(e,t={}){var c;let[n,o]=((c=e.cursor)==null?void 0:c.split(";"))||[void 0,void 0],a=[];e.labelNames&&e.labelNames.forEach(g=>{a.push(`label:"${g}"`)});let[i,u]=await Promise.all([n==="null"?null:this.searchIssues({query:`author:${e.username} ${a.join(" ")}`,cursor:n,includeFromArchivedRepos:e.includeFromArchivedRepos,maxPageSize:e.maxPageSize},t),o==="null"?null:this.searchIssues({query:`assignee:${e.username} ${a.join(" ")}`,cursor:o,includeFromArchivedRepos:e.includeFromArchivedRepos,maxPageSize:e.maxPageSize},t)]),l={},p=[],d=g=>{l[g.id]||(l[g.id]=!0,p.push(g))};return i==null||i.data.forEach(d),u==null||u.data.forEach(d),{pageInfo:{hasNextPage:(i==null?void 0:i.pageInfo.hasNextPage)||(u==null?void 0:u.pageInfo.hasNextPage)||!1,endCursor:`${(i==null?void 0:i.pageInfo.hasNextPage)&&(i==null?void 0:i.pageInfo.endCursor)||"null"};${(u==null?void 0:u.pageInfo.hasNextPage)&&(u==null?void 0:u.pageInfo.endCursor)||"null"}`},data:p}}async setPullRequestLabels(e,t={}){var u,l,p;let{pullRequest:n,labels:o}=e;if(!n.graphQLId)throw new Error('GitHub requires "graphQLId" for this function.');let a=`mutation SetPullRequestLabels($pullRequestGraphQLId: ID!, $labelGraphQLIds: [ID!]) {
|
|
578
|
+
updatePullRequest(input: { pullRequestId: $pullRequestGraphQLId, labelIds: $labelGraphQLIds }) {
|
|
579
|
+
pullRequest {
|
|
580
|
+
id
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}`;if(!((p=(l=(u=(await R(this.config,{query:a,variables:{pullRequestGraphQLId:n.graphQLId,labelGraphQLIds:o.map(d=>{if(!d.graphQLId)throw new Error('GitHub requires label "graphQLId" for this function.');return d.graphQLId})}},t)).body.data)==null?void 0:u.updatePullRequest)==null?void 0:l.pullRequest)!=null&&p.id))throw new Error("Could not set pull request labels")}async getIssuesForRepos(e,t={}){let n=xe(e.startQuery||""),{cursor:o,assigneeLogins:a,updatedBefore:i,authorLogin:u,mentionLogin:l,labelNames:p}=e;return e.repos.forEach(d=>{n.push(`repo:${d.namespace}/${d.name}`)}),a&&a.forEach(d=>{n.push(`assignee:${d}`)}),i&&n.push(`updated:<${i}`),u&&n.push(`author:${u}`),l&&n.push(`mentions:${l}`),p&&p.forEach(d=>{n.push(`label:"${d}"`)}),this.searchIssues({query:`sort:updated ${n.join(" ")}`,cursor:o,includeFromArchivedRepos:e.includeFromArchivedRepos,maxPageSize:e.maxPageSize},t)}async closeIssueWithReason(e,t={}){var u,l,p;let{issue:n,reason:o}=e;if(!n.graphQLId)throw new Error('GitHub requires "graphQLId" for this function.');let a=`mutation CloseIssueWithReason($issueGraphQLId: ID!, $reason: IssueClosedStateReason!) {
|
|
584
|
+
closeIssue(input: { issueId: $issueGraphQLId, stateReason: $reason }) {
|
|
585
|
+
issue {
|
|
586
|
+
id
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
}`;if(!((p=(l=(u=(await R(this.config,{query:a,variables:{issueGraphQLId:n.graphQLId,reason:o}},t)).body.data)==null?void 0:u.closeIssue)==null?void 0:l.issue)!=null&&p.id))throw new Error("Could not close issue with reason")}async closeIssue(e,t={}){var i,u,l;let{issue:n}=e;if(!n.graphQLId)throw new Error('GitHub requires "graphQLId" for this function.');let o=`mutation SetIssueState($issueGraphQLId: ID!) {
|
|
590
|
+
updateIssue(input: { id: $issueGraphQLId, state: CLOSED }) {
|
|
591
|
+
issue {
|
|
592
|
+
id
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}`;if(!((l=(u=(i=(await R(this.config,{query:o,variables:{issueGraphQLId:n.graphQLId}},t)).body.data)==null?void 0:i.updateIssue)==null?void 0:u.issue)!=null&&l.id))throw new Error("Could not close issue")}async reOpenIssue(e,t={}){var i,u,l;let{issue:n}=e;if(!n.graphQLId)throw new Error('GitHub requires "graphQLId" for this function.');let o=`mutation ReOpenIssue($issueGraphQLId: ID!) {
|
|
596
|
+
reopenIssue(input: { issueId: $issueGraphQLId }) {
|
|
597
|
+
issue {
|
|
598
|
+
id
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
}`;if(!((l=(u=(i=(await R(this.config,{query:o,variables:{issueGraphQLId:n.graphQLId}},t)).body.data)==null?void 0:i.reopenIssue)==null?void 0:u.issue)!=null&&l.id))throw new Error("Could not reopen issue")}async setIssueLabels(e,t={}){var l,p,d;let{issue:n,labels:o}=e;if(!n.graphQLId)throw new Error('GitHub requires "graphQLId" for this function.');let a=o.map(c=>c.graphQLId),i=`mutation SetIssueLabels($issueGraphQLId: ID!, $labelGraphQLIds: [ID!]) {
|
|
602
|
+
updateIssue(input: { id: $issueGraphQLId, labelIds: $labelGraphQLIds }) {
|
|
603
|
+
issue {
|
|
604
|
+
id
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
}`;if(!((d=(p=(l=(await R(this.config,{query:i,variables:{issueGraphQLId:n.graphQLId,labelGraphQLIds:a}},t)).body.data)==null?void 0:l.updateIssue)==null?void 0:p.issue)!=null&&d.id))throw new Error("Could not set issue labels")}async setIssueMilestone(e,t={}){var u,l,p;let{issue:n,milestone:o}=e;if(!n.graphQLId)throw new Error('GitHub requires "graphQLId" for this function.');if(o&&!o.graphQLId)throw new Error('GitHub requires milestone "graphQLId" for this function.');let a=`mutation SetIssueMilestone($issueGraphQLId: ID!, $milestoneGraphQLId: ID) {
|
|
608
|
+
updateIssue(input: { id: $issueGraphQLId, milestoneId: $milestoneGraphQLId }) {
|
|
609
|
+
issue {
|
|
610
|
+
id
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
}`;if(!((p=(l=(u=(await R(this.config,{query:`${a}`,variables:{issueGraphQLId:n.graphQLId,milestoneGraphQLId:(o==null?void 0:o.graphQLId)??null}},t)).body.data)==null?void 0:u.updateIssue)==null?void 0:l.issue)!=null&&p.id))throw new Error("Could not set milestone of issue")}async setIssueAssignees(e,t={}){var l,p,d;let{issue:n,assignees:o}=e;if(!n.graphQLId)throw new Error('GitHub requires "graphQLId" for this function.');let a=o.map(c=>{if(!c.graphQLId)throw new Error('GitHub requires assignee "graphQLId" for this function.');return c.graphQLId}),i=`mutation SetIssueAssignees($issueGraphQLId: ID!, $assigneeGraphQLIds: [ID!]!) {
|
|
614
|
+
updateIssue(input: { id: $issueGraphQLId, assigneeIds: $assigneeGraphQLIds }) {
|
|
615
|
+
issue {
|
|
616
|
+
id
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
}`;if(!((d=(p=(l=(await R(this.config,{query:i,variables:{issueGraphQLId:n.graphQLId,assigneeGraphQLIds:a}},t)).body.data)==null?void 0:l.updateIssue)==null?void 0:p.issue)!=null&&d.id))throw new Error("Could not set issue assignees")}async getMilestonesForRepo(e,t={}){var u,l,p,d;let{repo:{namespace:n,name:o},cursor:a}=e,i=await R(this.config,{query:`
|
|
620
|
+
query getLabelsForRepo($owner: String!, $name: String! $cursor: String, $first: Int!) {
|
|
621
|
+
repository(owner: $owner, name: $name) {
|
|
622
|
+
milestones(first: $first, after: $cursor) {
|
|
623
|
+
nodes {
|
|
624
|
+
${ge}
|
|
625
|
+
}
|
|
626
|
+
pageInfo {
|
|
627
|
+
endCursor
|
|
628
|
+
hasNextPage
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
`,variables:{owner:n,name:o,cursor:a,first:q}},t);if(!i.body.data)throw new Error(((u=i.body.errors)==null?void 0:u[0].message)||i.statusText||"Unknown error");return{pageInfo:((l=i.body.data.repository.milestones)==null?void 0:l.pageInfo)??{endCursor:null,hasNextPage:!1},data:((d=(p=i.body.data.repository.milestones)==null?void 0:p.nodes)==null?void 0:d.map(je))??[]}}async getLabelsForRepo(e,t={}){var u,l,p,d;let{repo:{namespace:n,name:o},cursor:a}=e,i=await R(this.config,{query:`
|
|
634
|
+
query getLabelsForRepo($owner: String!, $name: String! $cursor: String, $first: Int!) {
|
|
635
|
+
repository(owner: $owner, name: $name) {
|
|
636
|
+
labels(first: $first, after: $cursor) {
|
|
637
|
+
nodes {
|
|
638
|
+
${me}
|
|
639
|
+
}
|
|
640
|
+
pageInfo {
|
|
641
|
+
endCursor
|
|
642
|
+
hasNextPage
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
`,variables:{owner:n,name:o,cursor:a,first:q}},t);if(!i.body.data)throw new Error(((u=i.body.errors)==null?void 0:u[0].message)||i.statusText||"Unknown error");return{pageInfo:((l=i.body.data.repository.labels)==null?void 0:l.pageInfo)??{endCursor:null,hasNextPage:!1},data:((d=(p=i.body.data.repository.labels)==null?void 0:p.nodes)==null?void 0:d.map(Be))??[]}}};var yr="https://gitlab.com/api/v4",wr="https://gitlab.com/api/graphql",vt=/\/api\/v\d+$/,qt=r=>{if(r.endsWith("/api/graphql"))throw new Error("The graphql endpoint is being used as the baseUrl. This package uses both GraphQL and REST APIs, and the REST version cannot be assumed. Use the REST endpoint as the baseUrl instead.")},Me=(r,s)=>{let e=s.baseUrl||r.baseUrl;return e?(e=e.replace(/\/$/,""),qt(e),e):yr},Pr=(r,s)=>{let e=s.baseUrl||r.baseUrl;return e?(e=e.replace(/\/$/,""),qt(e),vt.test(e)&&(e=e.replace(vt,"")),`${e}/api/graphql`):wr},y=(r,s,e)=>{let t=I(e.token||r.token);return r.request({url:Pr(r,e),method:"POST",headers:{...t,"Content-Type":"application/json"},body:JSON.stringify(s)})},Ie=r=>r==null?void 0:r.map(s=>`"${s.message}"`).join(", ");var Ke=r=>r.split("/").slice(0,-1).join("/"),Ve=r=>r.split("/").at(-1)??"",Re=r=>({id:r.id.replace(X,""),graphQLId:r.id,namespace:Ke(r.fullPath),name:Ve(r.fullPath),webUrl:r.webUrl}),Et=r=>({id:r.id.replace(X,""),graphQLId:r.id,httpsUrl:r.httpUrlToRepo,namespace:Ke(r.fullPath),name:Ve(r.fullPath),sshUrl:r.sshUrlToRepo,webUrl:r.webUrl}),Sr={assigned:"assignedMergeRequests",authored:"authoredMergeRequests",reviewRequested:"reviewRequestedMergeRequests"},vr={CAN_BE_MERGED:"MERGEABLE",CANNOT_BE_MERGED:"CONFLICTS",CANNOT_BE_MERGED_RECHECK:"UNKNOWN",UNCHECKED:"UNKNOWN",CHECKING:"UNKNOWN"};var qr="gid://gitlab/User/",X="gid://gitlab/Project/",Er="gid://gitlab/MergeRequest/",Cr="gid://gitlab/Issue/",Ur="gid://gitlab/ProjectLabel/",Dr="gid://gitlab/Milestone/",Lr="gid://gitlab/Ci::Build/",Xe=`
|
|
648
|
+
description
|
|
649
|
+
dueDate
|
|
650
|
+
id
|
|
651
|
+
iid
|
|
652
|
+
startDate
|
|
653
|
+
state
|
|
654
|
+
title
|
|
655
|
+
webPath
|
|
656
|
+
`,ze=`
|
|
657
|
+
id
|
|
658
|
+
fullPath
|
|
659
|
+
webUrl
|
|
660
|
+
httpUrlToRepo
|
|
661
|
+
sshUrlToRepo
|
|
662
|
+
repository {
|
|
663
|
+
rootRef
|
|
664
|
+
}
|
|
665
|
+
`,k=`
|
|
666
|
+
id
|
|
667
|
+
name
|
|
668
|
+
username
|
|
669
|
+
publicEmail
|
|
670
|
+
avatarUrl
|
|
671
|
+
webUrl
|
|
672
|
+
`,Ze=`
|
|
673
|
+
color
|
|
674
|
+
description
|
|
675
|
+
id
|
|
676
|
+
title
|
|
677
|
+
`,He=`
|
|
678
|
+
author {
|
|
679
|
+
${k}
|
|
680
|
+
}
|
|
681
|
+
assignees {
|
|
682
|
+
nodes {
|
|
683
|
+
${k}
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
closedAt
|
|
687
|
+
createdAt
|
|
688
|
+
description
|
|
689
|
+
dueDate
|
|
690
|
+
id
|
|
691
|
+
iid
|
|
692
|
+
labels {
|
|
693
|
+
nodes {
|
|
694
|
+
${Ze}
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
state
|
|
698
|
+
title
|
|
699
|
+
type
|
|
700
|
+
updatedAt
|
|
701
|
+
upvotes
|
|
702
|
+
userNotesCount
|
|
703
|
+
webUrl
|
|
704
|
+
milestone {
|
|
705
|
+
${Xe}
|
|
706
|
+
}
|
|
707
|
+
`,$r=`
|
|
708
|
+
stages {
|
|
709
|
+
nodes {
|
|
710
|
+
jobs {
|
|
711
|
+
nodes {
|
|
712
|
+
allowFailure
|
|
713
|
+
createdAt
|
|
714
|
+
finishedAt
|
|
715
|
+
id
|
|
716
|
+
name
|
|
717
|
+
status
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
name
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
`,Ct=(r,s,e)=>`
|
|
724
|
+
id
|
|
725
|
+
state
|
|
726
|
+
approved
|
|
727
|
+
author {
|
|
728
|
+
${k}
|
|
729
|
+
}
|
|
730
|
+
diffRefs {
|
|
731
|
+
baseSha
|
|
732
|
+
headSha
|
|
733
|
+
}
|
|
734
|
+
diffStatsSummary {
|
|
735
|
+
additions
|
|
736
|
+
deletions
|
|
737
|
+
fileCount
|
|
738
|
+
}
|
|
739
|
+
commitCount
|
|
740
|
+
draft
|
|
741
|
+
userNotesCount
|
|
742
|
+
upvotes
|
|
743
|
+
title
|
|
744
|
+
webUrl
|
|
745
|
+
createdAt
|
|
746
|
+
updatedAt
|
|
747
|
+
mergedAt
|
|
748
|
+
iid
|
|
749
|
+
targetBranch
|
|
750
|
+
sourceBranch
|
|
751
|
+
assignees {
|
|
752
|
+
nodes {
|
|
753
|
+
${k}
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
reviewers {
|
|
757
|
+
nodes {
|
|
758
|
+
${k}
|
|
759
|
+
mergeRequestInteraction {
|
|
760
|
+
approved
|
|
761
|
+
reviewState
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
mergeStatusEnum
|
|
766
|
+
labels {
|
|
767
|
+
nodes {
|
|
768
|
+
${Ze}
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
${r?"project { id httpUrlToRepo fullPath sshUrlToRepo webUrl archived } sourceProject { id httpUrlToRepo fullPath sshUrlToRepo webUrl }":""}
|
|
772
|
+
${s?`milestone { ${Xe} }`:""}
|
|
773
|
+
${e?`headPipeline { ${$r} }`:""}
|
|
774
|
+
`,z=r=>`${r.namespace}/${r.name}`,Ar=r=>`${r.namespace}/${r.name}`,We=r=>{var s;return{id:r.id.replace(X,""),graphQLId:r.id,namespace:Ke(r.fullPath),name:Ve(r.fullPath),webUrl:r.webUrl,httpsUrl:r.httpUrlToRepo,sshUrl:r.sshUrlToRepo,defaultBranch:(s=r.repository)!=null&&s.rootRef?{name:r.repository.rootRef}:null,permission:null}},Gr={opened:"OPEN",merged:"MERGED",closed:"CLOSED"},N=(r,s,e)=>{let t=r.avatarUrl;return!s&&(t!=null&&t.startsWith("/"))?t=`https://gitlab.com${t}`:s&&(t!=null&&t.startsWith("/"))&&e&&(t=`${e.replace(/\/+?$/,"")}${t}`),{id:r.id.replace(qr,""),graphQLId:r.id,name:r.name,username:r.username,email:r.publicEmail??null,avatarUrl:t,url:r.webUrl}},Ye=r=>({color:r.color,description:r.description,id:r.id.replace(Ur,""),graphQLId:r.id,name:r.title}),Tr=(r,s)=>r?r==="FAILED"&&s?"WARNING":{CANCELED:"CANCELLED",CREATED:"PENDING",FAILED:"FAILED",MANUAL:"OPTIONAL_ACTION_REQUIRED",PENDING:"PENDING",PREPARING:"RUNNING",RUNNING:"RUNNING",SCHEDULED:"PENDING",SKIPPED:"SKIPPED",SUCCESS:"SUCCESS",WAITING_FOR_CALLBACK:"PENDING",WAITING_FOR_RESOURCE:"PENDING"}[r]:null,Or=(r,s,e)=>{var n;let t={APPROVED:"APPROVED",REQUESTED_CHANGES:"CHANGES_REQUESTED",REVIEWED:"COMMENTED",UNAPPROVED:"REVIEW_REQUESTED",UNREVIEWED:"REVIEW_REQUESTED"};return{reviewer:N(r,s,e),state:(n=r.mergeRequestInteraction)!=null&&n.reviewState?t[r.mergeRequestInteraction.reviewState]:"REVIEW_REQUESTED"}},Ut=(r,s,e,t,n)=>{var a,i,u,l,p,d,c,g,m,h,b,S;let o=(a=r.reviewers)!=null&&a.nodes?r.reviewers.nodes.map(f=>Or(f,t,n)):null;return{id:r.id.replace(Er,""),graphQLId:r.id,title:r.title,number:parseInt(r.iid,10),state:Gr[r.state],commentCount:r.userNotesCount||0,upvoteCount:r.upvotes,author:r.author?N(r.author,t,n):null,createdDate:new Date(r.createdAt),isDraft:r.draft,repository:{id:s.id,graphQLId:s.graphQLId,name:s.name,owner:{login:s.namespace},remoteInfo:s.httpsUrl&&s.sshUrl?{cloneUrlHTTPS:s.httpsUrl,cloneUrlSSH:s.sshUrl}:null},headRepository:e?{id:e.id,graphQLId:e.graphQLId,name:e.name,owner:{login:e.namespace},remoteInfo:{cloneUrlHTTPS:e.httpsUrl,cloneUrlSSH:e.sshUrl}}:null,headCommit:{buildStatuses:((l=(u=(i=r.headPipeline)==null?void 0:i.stages)==null?void 0:u.nodes)==null?void 0:l.flatMap(f=>{var P,O;return((O=(P=f.jobs)==null?void 0:P.nodes)==null?void 0:O.map(A=>({completedAt:A.finishedAt?new Date(A.finishedAt):null,description:null,name:A.name??null,state:Tr(A.status,A.allowFailure),stage:f.name??null,startedAt:new Date(A.createdAt),url:`${s.webUrl}/-/jobs/${A.id.replace(Lr,"")}`})))??[]}))??[]},baseRef:{name:r.targetBranch,oid:((p=r.diffRefs)==null?void 0:p.baseSha)??null},headRef:{name:r.sourceBranch,oid:((d=r.diffRefs)==null?void 0:d.headSha)??null},url:r.webUrl,updatedDate:new Date(r.updatedAt),closedDate:r.mergedAt?new Date(r.mergedAt):null,mergedDate:r.mergedAt?new Date(r.mergedAt):null,assignees:(c=r.assignees)!=null&&c.nodes?r.assignees.nodes.map(f=>N(f,t,n)):null,reviews:o,reviewDecision:r.approved?"APPROVED":F(o),additions:((g=r.diffStatsSummary)==null?void 0:g.additions)||0,deletions:((m=r.diffStatsSummary)==null?void 0:m.deletions)||0,fileCount:((h=r.diffStatsSummary)==null?void 0:h.fileCount)||0,commitCount:r.commitCount||0,mergeableState:vr[r.mergeStatusEnum],milestone:r.milestone?et(r.milestone,s.webUrl):null,labels:((S=(b=r.labels)==null?void 0:b.nodes)==null?void 0:S.map(Ye))??[],permissions:null}},Je=(r,s,e,t)=>{var n,o;return{author:N(r.author,e,t),assignees:r.assignees.nodes.map(a=>N(a,e,t)),commentCount:r.userNotesCount,closedDate:r.closedAt?new Date(r.closedAt):null,createdDate:new Date(r.createdAt),description:r.description,graphQLId:r.id,id:r.id.replace(Cr,""),labels:((o=(n=r.labels)==null?void 0:n.nodes)==null?void 0:o.map(Ye))??[],number:r.iid,repository:{id:s.id.replace(X,""),graphQLId:s.id,name:s.name,owner:{login:s.namespace}},updatedDate:new Date(r.updatedAt),upvoteCount:r.upvotes,state:{name:r.state,color:null},type:r.type,title:r.title,url:r.webUrl,milestone:r.milestone?et(r.milestone,s.webUrl):null}},et=(r,s)=>({id:r.id.replace(Dr,""),graphQLId:r.id,number:parseInt(r.iid,10),title:r.title,description:r.description,isOpen:r.state==="active",url:`${s}/-/${r.webPath.replace(/.+?\/-\//,"")}`,startDate:r.startDate?new Date(r.startDate):null,dueDate:r.dueDate?new Date(r.dueDate):null}),Z=class extends G{getIsSelfHosted(s){return!!s.baseUrl||!!this.config.baseUrl}async getCurrentUser(s={},e={}){var o;let n=(o=(await y(this.config,{query:`
|
|
775
|
+
query getCurrentUser {
|
|
776
|
+
currentUser {
|
|
777
|
+
${k}
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
`},e)).body.data)==null?void 0:o.currentUser;if(!n)throw new Error("Current user not found.");return{data:N(n,this.getIsSelfHosted(e),this.config.baseUrl??e.baseUrl)}}async getUserForCommit(s,e={}){var a,i,u,l;let t=z(s.repo),o=(l=(u=(i=(a=(await y(this.config,{query:`
|
|
781
|
+
query getUserForCommit($fullPath: ID!, $oid: String!) {
|
|
782
|
+
project(fullPath: $fullPath) {
|
|
783
|
+
repository {
|
|
784
|
+
tree(ref: $oid) {
|
|
785
|
+
lastCommit {
|
|
786
|
+
authorName
|
|
787
|
+
authorEmail
|
|
788
|
+
authorGravatar
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
`,variables:{fullPath:t,oid:s.oid}},e)).body.data)==null?void 0:a.project)==null?void 0:i.repository)==null?void 0:u.tree)==null?void 0:l.lastCommit;if(!o)throw new Error("Commit not found.");return{data:{name:o.authorName,email:o.authorEmail,avatarUrl:o.authorGravatar}}}async getAccountForEmail(s,e={}){var o,a,i;let n=(i=(a=(o=(await y(this.config,{query:`
|
|
795
|
+
query getAccountForEmail($email: String!) {
|
|
796
|
+
users(search: $email) {
|
|
797
|
+
nodes {
|
|
798
|
+
${k}
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
`,variables:{email:s.email}},e)).body.data)==null?void 0:o.users)==null?void 0:a.nodes)==null?void 0:i[0];if(!n)throw new Error("User not found.");return{data:N(n,this.getIsSelfHosted(e),this.config.baseUrl??e.baseUrl)}}async getAccountForUsername(s,e={}){var o;let n=(o=(await y(this.config,{query:`
|
|
803
|
+
query getAccountForUsername($username: String!) {
|
|
804
|
+
user(username: $username) {
|
|
805
|
+
${k}
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
`,variables:{username:s.username}},e)).body.data)==null?void 0:o.user;if(!n)throw new Error("User not found.");return{data:N(n,this.getIsSelfHosted(e),this.config.baseUrl??e.baseUrl)}}async getAccountsForRepo(s,e={}){var u,l,p,d,c,g,m;let{repo:{namespace:t,name:n},cursor:o}=s,a=await y(this.config,{query:`
|
|
809
|
+
query getAccountsForRepo(
|
|
810
|
+
$fullPath: ID!
|
|
811
|
+
$after: String
|
|
812
|
+
) {
|
|
813
|
+
project(
|
|
814
|
+
fullPath: $fullPath
|
|
815
|
+
) {
|
|
816
|
+
projectMembers(after: $after) {
|
|
817
|
+
nodes {
|
|
818
|
+
user {
|
|
819
|
+
${k}
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
pageInfo {
|
|
823
|
+
endCursor
|
|
824
|
+
hasNextPage
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
`,variables:{fullPath:`${t}/${n}`,after:o}},e),i=(d=(p=(l=(u=a.body.data)==null?void 0:u.project)==null?void 0:l.projectMembers)==null?void 0:p.nodes)==null?void 0:d.map(h=>h.user).filter(h=>h!==null);return{pageInfo:((m=(g=(c=a.body.data)==null?void 0:c.project)==null?void 0:g.projectMembers)==null?void 0:m.pageInfo)??{endCursor:null,hasNextPage:!1},data:(i==null?void 0:i.map(h=>N(h,this.getIsSelfHosted(e),this.config.baseUrl??e.baseUrl)))??[]}}async getRepo(s,e={}){var o;let t=z(s),n=await y(this.config,{query:`
|
|
830
|
+
query getRepo($fullPath: ID!) {
|
|
831
|
+
project(fullPath: $fullPath) {
|
|
832
|
+
${ze}
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
`,variables:{fullPath:t}},e);if(!((o=n.body.data)!=null&&o.project))throw new Error(`Repository ${t} not found`);return{data:We(n.body.data.project)}}async getReposBase(s,e={}){let n=s.map(z).map((u,l)=>`
|
|
836
|
+
getRepo_${l}: project(fullPath: "${u}") {
|
|
837
|
+
${ze}
|
|
838
|
+
}
|
|
839
|
+
`).join(`
|
|
840
|
+
`),o=await y(this.config,{query:`
|
|
841
|
+
query batchGetRepos {
|
|
842
|
+
${n}
|
|
843
|
+
}
|
|
844
|
+
`},e);if(!o.body.data)throw new Error(Ie(o.body.errors)||o.statusText||"Unknown error");let a=[],i=[];return s.forEach((u,l)=>{let p=o.body.data[`getRepo_${l}`];p?a.push(We(p)):i.push({input:u})}),{data:a,errors:i}}async getRepos(s,e={}){let t=[];for(let a=0;a<s.length;a+=20)t.push(s.slice(a,a+20));return(await Promise.all(t.map(a=>this.getReposBase(a,e)))).reduce((a,i)=>({data:[...a.data,...i.data],errors:[...a.errors,...i.errors]}),{data:[],errors:[]})}async getReposForCurrentUser(s,e={}){var o,a,i,u,l;let t=await y(this.config,{query:`
|
|
845
|
+
query getReposForCurrentUser($after: String) {
|
|
846
|
+
projects(membership: true first: 100 after: $after) {
|
|
847
|
+
pageInfo {
|
|
848
|
+
endCursor
|
|
849
|
+
hasNextPage
|
|
850
|
+
}
|
|
851
|
+
nodes {
|
|
852
|
+
${ze}
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
`,variables:{after:s.cursor}},e);if(!((o=t.body.data)!=null&&o.projects))throw new Error(Ie(t.body.errors)||t.statusText||"Unknown error");let n=((i=(a=t.body.data)==null?void 0:a.projects)==null?void 0:i.nodes)||[];return{pageInfo:(l=(u=t.body.data)==null?void 0:u.projects)==null?void 0:l.pageInfo,data:n.map(We)}}async getRefs(s,e,t={}){var u;let n=z(e.repo),o=new URL(`${Me(this.config,t)}/projects/${encodeURIComponent(n)}/repository/${s}`);o.searchParams.set("page",((u=e.page)==null?void 0:u.toString())||"1"),o.searchParams.set("per_page",q.toString());let a=await this.config.request({url:o.toString(),headers:I(t.token||this.config.token)}),i=a.headers["x-next-page"];return{pageInfo:{hasNextPage:!!i,nextPage:i?parseInt(i,10):null},data:a.body.map(l=>({name:l.name,commit:{oid:l.commit.id,authoredDate:new Date(l.commit.authored_date),committedDate:new Date(l.commit.committed_date)}}))}}async getBranches(s,e={}){return this.getRefs("branches",s,e)}async getTags(s,e={}){return this.getRefs("tags",s,e)}async getBlame(s,e={}){let t=z(s.repo),n=new URL(`${Me(this.config,e)}/projects/${encodeURIComponent(t)}/repository/files/${encodeURIComponent(s.path)}/blame`);n.searchParams.set("ref",s.ref);let o=await this.config.request({url:n.toString(),headers:I(e.token||this.config.token)}),a=0;return{data:{ranges:o.body.map(i=>{let u=a+1;return a+=i.lines.length,{startingLine:u,endingLine:a,commit:{oid:i.commit.id,parentOids:i.commit.parent_ids,authoredDate:new Date(i.commit.authored_date),author:{name:i.commit.author_name,email:i.commit.author_email,avatarUrl:null},committedDate:new Date(i.commit.committed_date),committer:{name:i.commit.committer_name,email:i.commit.committer_email,avatarUrl:null},message:i.commit.message,fileCount:null,additions:null,deletions:null}}})}}}async getPullRequestsForUser(s,e={}){var a;let t=Sr[s.association],n=await y(this.config,{query:`
|
|
857
|
+
query getPullRequestsForUser($username: String! $cursor: String $labelNames: [String!]) {
|
|
858
|
+
user(username: $username) {
|
|
859
|
+
${t}(state:opened first:100 after:$cursor labels: $labelNames) {
|
|
860
|
+
pageInfo {
|
|
861
|
+
endCursor
|
|
862
|
+
hasNextPage
|
|
863
|
+
}
|
|
864
|
+
nodes {
|
|
865
|
+
${Ct(!0,!0,!0)}
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
`,variables:{username:s.username,cursor:s.cursor,labelNames:s.labelNames}},e);if(!n.body.data)throw new Error(Ie(n.body.errors)||n.statusText||"Unknown error");if(!n.body.data.user)throw new Error("User not found");let o=n.body.data.user[t];if(!o)throw new Error("Unexpected response");return{pageInfo:o.pageInfo,data:((a=o.nodes)==null?void 0:a.filter(i=>s.includeFromArchivedRepos||!i.project.archived).map(i=>Ut(i,Et(i.project),Et(i.sourceProject),this.getIsSelfHosted(e),this.config.baseUrl??e.baseUrl)))||[]}}async getPullRequestsAssociatedWithUser(s,e={}){var c;let[t,n,o]=((c=s.cursor)==null?void 0:c.split(";"))||[void 0,void 0,void 0],[a,i,u]=await Promise.all([t==="null"?null:this.getPullRequestsForUser({username:s.username,association:"authored",cursor:t,includeFromArchivedRepos:s.includeFromArchivedRepos,labelNames:s.labelNames},e),n==="null"?null:this.getPullRequestsForUser({username:s.username,association:"assigned",cursor:n,includeFromArchivedRepos:s.includeFromArchivedRepos,labelNames:s.labelNames},e),o==="null"?null:this.getPullRequestsForUser({username:s.username,association:"reviewRequested",cursor:o,includeFromArchivedRepos:s.includeFromArchivedRepos,labelNames:s.labelNames},e)]),l={},p=[],d=g=>{l[g.id]||(l[g.id]=!0,p.push(g))};return a==null||a.data.forEach(d),i==null||i.data.forEach(d),u==null||u.data.forEach(d),{pageInfo:{hasNextPage:(a==null?void 0:a.pageInfo.hasNextPage)||(i==null?void 0:i.pageInfo.hasNextPage)||(u==null?void 0:u.pageInfo.hasNextPage)||!1,endCursor:`${(a==null?void 0:a.pageInfo.hasNextPage)&&(a==null?void 0:a.pageInfo.endCursor)||"null"};${(i==null?void 0:i.pageInfo.hasNextPage)&&(i==null?void 0:i.pageInfo.endCursor)||"null"};${(u==null?void 0:u.pageInfo.hasNextPage)&&(u==null?void 0:u.pageInfo.endCursor)||"null"}`},data:p}}getVariablesForPullRequests(s){let{updatedBefore:e,isDraft:t,authorLogin:n,assigneeLogins:o,labelNames:a,reviewRequestedLogin:i}=s||{},u={},l=[],p=[],d=(c,g,m)=>{l.push(`$${c}: ${m}`),p.push(`${c}: $${c}`),u[c]=g};return e&&d("updatedBefore",e,"Time"),n&&d("authorUsername",n,"String"),o&&d("assigneeUsername",o[0],"String"),a&&d("labelName",a,"[String]"),t!=null&&d("draft",t,"Boolean"),i&&d("reviewerUsername",i,"String"),{variables:u,variableTypes:l,mergeRequestArguments:p}}async getPullRequestsForRepoBase(s,e={},t){var b,S,f;let{cursor:n,repo:o}=s||{},a=z(o),{variables:i,variableTypes:u,mergeRequestArguments:l}=this.getVariablesForPullRequests(s),p={fullPath:a,...i},d=await y(this.config,{query:`
|
|
871
|
+
query getPullRequestsForRepo(
|
|
872
|
+
$fullPath: ID!
|
|
873
|
+
$after: String
|
|
874
|
+
${u.length?u.join(" "):""}
|
|
875
|
+
) {
|
|
876
|
+
project(
|
|
877
|
+
fullPath: $fullPath
|
|
878
|
+
) {
|
|
879
|
+
id
|
|
880
|
+
fullPath
|
|
881
|
+
webUrl
|
|
882
|
+
archived
|
|
883
|
+
mergeRequests(
|
|
884
|
+
first: 100
|
|
885
|
+
state: opened
|
|
886
|
+
sort: UPDATED_DESC
|
|
887
|
+
after: $after
|
|
888
|
+
${l.length?l.join(" "):""}
|
|
889
|
+
) {
|
|
890
|
+
pageInfo {
|
|
891
|
+
endCursor
|
|
892
|
+
hasNextPage
|
|
893
|
+
}
|
|
894
|
+
nodes {
|
|
895
|
+
${Ct(!1,!0,!0)}
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
`,variables:{...p,after:n}},e),c=[],g=(b=d.body.data)==null?void 0:b.project;if(!t&&(g!=null&&g.archived))return{pageInfo:null,data:[]};let m=Re(g||{id:"",fullPath:"",webUrl:""});return(((S=g==null?void 0:g.mergeRequests)==null?void 0:S.nodes)||[]).forEach(P=>{c.push(Ut(P,m,null,this.getIsSelfHosted(e),this.config.baseUrl??e.baseUrl))}),{pageInfo:(f=g==null?void 0:g.mergeRequests)==null?void 0:f.pageInfo,data:c}}async getPullRequestsForRepo(s,e={}){return this.getPullRequestsForRepoBase(s,e,!1)}async getPullRequestsForRepos(s,e={}){let{repos:t,assigneeLogins:n,updatedBefore:o,authorLogin:a,labelNames:i,isDraft:u,reviewRequestedLogin:l}=s;return{data:(await Promise.all(t.map(d=>this.getPullRequestsForRepoBase({repo:d,assigneeLogins:n,updatedBefore:o,authorLogin:a,labelNames:i,isDraft:u,reviewRequestedLogin:l},e,s.includeFromArchivedRepos??!1)))).flatMap(d=>d.data)}}async closePullRequest(s,e={}){var i,u,l;let{pullRequest:t}=s,n=`mutation ClosePullRequest($fullPath: ID!, $pullRequestId: String!) {
|
|
901
|
+
mergeRequestUpdate(input: { projectPath: $fullPath, iid: $pullRequestId, state: CLOSED }) {
|
|
902
|
+
errors,
|
|
903
|
+
mergeRequest {
|
|
904
|
+
id
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
}`,a=(i=(await y(this.config,{query:n,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,pullRequestId:t.number.toString()}},e)).body.data)==null?void 0:i.mergeRequestUpdate;if(!((u=a==null?void 0:a.mergeRequest)!=null&&u.id)||((l=a==null?void 0:a.errors)==null?void 0:l.length)!==0)throw new Error("Could not close pull request")}async mergePullRequest(s,e={}){var u,l,p,d;let{pullRequest:t,mergeStrategy:n}=s;if(!((u=t.headRef)!=null&&u.oid))throw new Error('GitLab requires "headRef.oid" for this function.');let o=`mutation MergePullRequest(
|
|
908
|
+
$fullPath: ID!,
|
|
909
|
+
$pullRequestId: String!,
|
|
910
|
+
$expectedSourceSha: String!,
|
|
911
|
+
$squash: Boolean!,
|
|
912
|
+
) {
|
|
913
|
+
mergeRequestAccept(input: {
|
|
914
|
+
projectPath: $fullPath,
|
|
915
|
+
iid: $pullRequestId,
|
|
916
|
+
sha: $expectedSourceSha,
|
|
917
|
+
squash: $squash,
|
|
918
|
+
}) {
|
|
919
|
+
errors,
|
|
920
|
+
mergeRequest {
|
|
921
|
+
id
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
}`,i=(l=(await y(this.config,{query:o,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,pullRequestId:t.number.toString(),expectedSourceSha:t.headRef.oid,squash:n==="SQUASH"}},e)).body.data)==null?void 0:l.mergeRequestAccept;if(!((p=i==null?void 0:i.mergeRequest)!=null&&p.id)||((d=i==null?void 0:i.errors)==null?void 0:d.length)!==0)throw new Error("Could not merge pull request")}async setPullRequestMilestone(s,e={}){var u,l,p;let{pullRequest:t,milestone:n}=s;if(!t.graphQLId)throw new Error('GitHub requires "graphQLId" for this function.');let o=`mutation SetPullRequestMilestone($fullPath: ID!, $pullRequestId: String!, $milestoneGraphQLId: MilestoneID) {
|
|
925
|
+
mergeRequestSetMilestone(input: { projectPath: $fullPath, iid: $pullRequestId, milestoneId: $milestoneGraphQLId }) {
|
|
926
|
+
errors,
|
|
927
|
+
mergeRequest {
|
|
928
|
+
id
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
}`,a=await y(this.config,{query:o,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,pullRequestId:t.number.toString(),milestoneGraphQLId:n==null?void 0:n.graphQLId}},e),i=(u=a.body.data)==null?void 0:u.mergeRequestSetMilestone;if(!((l=i==null?void 0:i.mergeRequest)!=null&&l.id)||a.body.errors||((p=i==null?void 0:i.errors)==null?void 0:p.length)!==0)throw new Error("Could not set milestone of pull request")}async setPullRequestAsDraft(s,e={}){var u,l,p;let{pullRequest:t,isDraft:n}=s,o=`mutation MergeRequestSetDraft($fullPath: ID!, $pullRequestId: String!, $isDraft: Boolean!) {
|
|
932
|
+
mergeRequestSetDraft(input: { projectPath: $fullPath, iid: $pullRequestId, draft: $isDraft }) {
|
|
933
|
+
errors,
|
|
934
|
+
mergeRequest {
|
|
935
|
+
id
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
}`,i=(u=(await y(this.config,{query:o,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,pullRequestId:t.number.toString(),isDraft:n}},e)).body.data)==null?void 0:u.mergeRequestSetDraft;if(!((l=i==null?void 0:i.mergeRequest)!=null&&l.id)||((p=i==null?void 0:i.errors)==null?void 0:p.length)!==0)throw new Error("Could not set pull request as draft")}async setPullRequestReviewers(s,e={}){var l,p,d;let{pullRequest:t,reviewers:n}=s,o=n.map(c=>{if(!c.username)throw new Error('GitLab requires reviewer "username" for this function.');return c.username}),a=`mutation MergeRequestSetReviewers($fullPath: ID!, $pullRequestId: String!, $reviewerUsernames: [String!]!) {
|
|
939
|
+
mergeRequestSetReviewers(input: { projectPath: $fullPath, iid: $pullRequestId, reviewerUsernames: $reviewerUsernames }) {
|
|
940
|
+
errors,
|
|
941
|
+
mergeRequest {
|
|
942
|
+
id
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
}`,u=(l=(await y(this.config,{query:a,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,pullRequestId:t.number.toString(),reviewerUsernames:o}},e)).body.data)==null?void 0:l.mergeRequestSetReviewers;if(!((p=u==null?void 0:u.mergeRequest)!=null&&p.id)||((d=u==null?void 0:u.errors)==null?void 0:d.length)!==0)throw new Error("Could not set pull request reviewers")}async reRequestPullRequestReview(s,e={}){var u,l,p;let{pullRequest:t,reviewer:n}=s;if(!n.graphQLId)throw new Error('GitLab requires reviwer "graphQLId" for this function.');let o=`mutation MergeRequestReviewerRereview($fullPath: ID!, $pullRequestId: String!, $reviewerUserId: UserID!) {
|
|
946
|
+
mergeRequestReviewerRereview(input: { projectPath: $fullPath, iid: $pullRequestId, userId: $reviewerUserId }) {
|
|
947
|
+
errors,
|
|
948
|
+
mergeRequest {
|
|
949
|
+
id
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
}`,i=(u=(await y(this.config,{query:o,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,pullRequestId:t.number.toString(),reviewerUserId:n.graphQLId}},e)).body.data)==null?void 0:u.mergeRequestReviewerRereview;if(!((l=i==null?void 0:i.mergeRequest)!=null&&l.id)||((p=i==null?void 0:i.errors)==null?void 0:p.length)!==0)throw new Error("Could not set pull request reviewers")}async reRequestPullRequestReviews(s,e={}){let{pullRequest:t,reviewers:n}=s,o=t.reviews;if(!o)throw new Error('GitLab requires "reviews" for this function.');let a=n.filter(i=>o.find(u=>u.reviewer.graphQLId===i.graphQLId));await Promise.all(a.map(i=>this.reRequestPullRequestReview({pullRequest:t,reviewer:i},e)))}async setPullRequestAssignees(s,e={}){var l,p,d;let{pullRequest:t,assignees:n}=s,o=n.map(c=>{if(!c.username)throw new Error('GitLab requires assignee "username" for this function.');return c.username}),a=`mutation MergeRequestSetAssignees($fullPath: ID!, $pullRequestId: String!, $assigneeUsernames: [String!]!) {
|
|
953
|
+
mergeRequestSetAssignees(input: { projectPath: $fullPath, iid: $pullRequestId, assigneeUsernames: $assigneeUsernames }) {
|
|
954
|
+
errors,
|
|
955
|
+
mergeRequest {
|
|
956
|
+
id
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
}`,u=(l=(await y(this.config,{query:a,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,pullRequestId:t.number.toString(),assigneeUsernames:o}},e)).body.data)==null?void 0:l.mergeRequestSetAssignees;if(!((p=u==null?void 0:u.mergeRequest)!=null&&p.id)||((d=u==null?void 0:u.errors)==null?void 0:d.length)!==0)throw new Error("Could not set pull request assignees")}async setPullRequestLabels(s,e={}){var u,l,p;let{pullRequest:t,labels:n}=s,o=n.map(d=>{if(!d.graphQLId)throw new Error('GitLab requires "graphQLId" for labels in this function.');return d.graphQLId}),a=`mutation SetPullRequestLabels($fullPath: ID!, $pullRequestId: String!, $labelGraphQLIds: [LabelID!]!) {
|
|
960
|
+
mergeRequestSetLabels(input: { projectPath: $fullPath, iid: $pullRequestId, labelIds: $labelGraphQLIds }) {
|
|
961
|
+
mergeRequest {
|
|
962
|
+
id
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
}`;if(!((p=(l=(u=(await y(this.config,{query:a,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,pullRequestId:t.number.toString(),labelGraphQLIds:o}},e)).body.data)==null?void 0:u.mergeRequestSetLabels)==null?void 0:l.mergeRequest)!=null&&p.id))throw new Error("Could not set pull request labels")}async getIssue(s,e={}){var o,a,i;let t=Ar(s),n=await y(this.config,{query:`
|
|
966
|
+
query GetSingleIssue($projectId: ID!, $issueNumber: String!) {
|
|
967
|
+
project(fullPath: $projectId) {
|
|
968
|
+
id
|
|
969
|
+
fullPath
|
|
970
|
+
webUrl
|
|
971
|
+
issue(iid: $issueNumber) {
|
|
972
|
+
${He}
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
`,variables:{issueNumber:s.number,projectId:t}},e);if(!((o=n.body.data)!=null&&o.project))throw new Error(`Repository ${t} not found`);if(!((i=(a=n.body.data)==null?void 0:a.project)!=null&&i.issue))throw new Error(`Issue ${s.number} not found`);return{data:Je(n.body.data.project.issue,Re(n.body.data.project),this.getIsSelfHosted(e),this.config.baseUrl??e.baseUrl)}}getVariablesForIssues(s){let{updatedBefore:e,authorLogin:t,assigneeLogins:n,labelNames:o}=s||{},a={},i=[],u=[],l=(p,d,c)=>{i.push(`$${p}: ${c}`),u.push(`${p}: $${p}`),a[p]=d};return e&&l("updatedBefore",e,"Time"),t&&l("authorUsername",t,"String"),n&&l("assigneeUsername",n[0],"String"),o&&l("labelName",o,"[String]"),{variables:a,variableTypes:i,issueArguments:u}}async getIssuesForRepo(s,e={}){var b,S,f;let{cursor:t,repo:n}=s||{},o=z(n),{variables:a,variableTypes:i,issueArguments:u}=this.getVariablesForIssues(s),l={fullPath:o,...a},p=`
|
|
977
|
+
query GetIssuesFromProject(
|
|
978
|
+
$fullPath: ID!
|
|
979
|
+
$after: String
|
|
980
|
+
${i.length?i.join(" "):""}
|
|
981
|
+
) {
|
|
982
|
+
project(
|
|
983
|
+
fullPath: $fullPath
|
|
984
|
+
) {
|
|
985
|
+
id
|
|
986
|
+
fullPath
|
|
987
|
+
webUrl
|
|
988
|
+
issues(
|
|
989
|
+
first: 100
|
|
990
|
+
state: opened
|
|
991
|
+
sort: UPDATED_DESC
|
|
992
|
+
after: $after
|
|
993
|
+
${u.length?u.join(" "):""}
|
|
994
|
+
) {
|
|
995
|
+
nodes {
|
|
996
|
+
${He}
|
|
997
|
+
}
|
|
998
|
+
pageInfo {
|
|
999
|
+
endCursor
|
|
1000
|
+
hasNextPage
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
}`,d=await y(this.config,{query:p,variables:{...l,after:t}},e),c=[],g=(b=d.body.data)==null?void 0:b.project,m=Re(g||{id:"",fullPath:"",webUrl:""});return(((S=g==null?void 0:g.issues)==null?void 0:S.nodes)||[]).forEach(P=>{c.push(Je(P,m,this.getIsSelfHosted(e),this.config.baseUrl??e.baseUrl))}),{pageInfo:((f=g==null?void 0:g.issues)==null?void 0:f.pageInfo)??{endCursor:null,hasNextPage:!1},data:c.sort((P,O)=>(P.updatedDate||P.createdDate).getTime()-(O.updatedDate||O.createdDate).getTime())}}async getIssuesForRepos(s,e={}){var g,m,h,b,S;let{cursor:t}=s||{},n=s.repoIds.map(f=>f.toString().startsWith(X)?f:`${X}${f}`),{variables:o,variableTypes:a,mergeRequestArguments:i}=this.getVariablesForPullRequests(s),u={projectIds:n,...o},l=`
|
|
1005
|
+
query GetIssuesFromProject(
|
|
1006
|
+
$projectIds: [ID!]
|
|
1007
|
+
$after: String
|
|
1008
|
+
${a.length?a.join(" "):""}
|
|
1009
|
+
) {
|
|
1010
|
+
projects(
|
|
1011
|
+
ids: $projectIds
|
|
1012
|
+
after: $after
|
|
1013
|
+
) {
|
|
1014
|
+
pageInfo {
|
|
1015
|
+
endCursor
|
|
1016
|
+
hasNextPage
|
|
1017
|
+
}
|
|
1018
|
+
nodes {
|
|
1019
|
+
id
|
|
1020
|
+
fullPath
|
|
1021
|
+
webUrl
|
|
1022
|
+
archived
|
|
1023
|
+
issues(
|
|
1024
|
+
first: 100
|
|
1025
|
+
state: opened
|
|
1026
|
+
sort: UPDATED_DESC
|
|
1027
|
+
${i.length?i.join(" "):""}
|
|
1028
|
+
) {
|
|
1029
|
+
nodes {
|
|
1030
|
+
${He}
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
}`,p=await y(this.config,{query:l,variables:{...u,after:t}},e),d=[];return(((m=(g=p.body.data)==null?void 0:g.projects)==null?void 0:m.nodes)||[]).forEach(f=>{var A;if(!s.includeFromArchivedRepos&&f.archived)return;let P=Re(f);(((A=f.issues)==null?void 0:A.nodes)||[]).forEach(xt=>d.push(Je(xt,P,this.getIsSelfHosted(e),this.config.baseUrl??e.baseUrl)))}),{pageInfo:((S=(b=(h=p.body)==null?void 0:h.data)==null?void 0:b.projects)==null?void 0:S.pageInfo)??{endCursor:null,hasNextPage:!1},data:d.sort((f,P)=>(f.updatedDate||f.createdDate).getTime()-(P.updatedDate||P.createdDate).getTime())}}async setIssueState(s,e={}){var i,u,l;let{issue:t,state:n}=s;if(!t.repository)throw new Error('GitLab requires "repository" for this function.');let o=`mutation SetIssueState($fullPath: ID!, $issueId: String!, $status: IssueStateEvent!) {
|
|
1036
|
+
updateIssue(input: { projectPath: $fullPath, iid: $issueId, stateEvent: $status }) {
|
|
1037
|
+
issue {
|
|
1038
|
+
id
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
}`;if(!((l=(u=(i=(await y(this.config,{query:o,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,issueId:t.number,status:n==="OPEN"?"REOPEN":"CLOSE"}},e)).body.data)==null?void 0:i.updateIssue)==null?void 0:u.issue)!=null&&l.id))throw new Error("Could not set issue status")}async closeIssue(s,e={}){await this.setIssueState({...s,state:"CLOSED"},e)}async reOpenIssue(s,e={}){await this.setIssueState({...s,state:"OPEN"},e)}async setIssueLabels(s,e={}){var u,l,p;let{issue:t,labels:n}=s;if(!t.repository)throw new Error('GitLab requires a "repository" for this function.');let o=n.map(d=>{if(!d.graphQLId)throw new Error('GitLab requires label "graphQLId" for this function.');return d.graphQLId}),a=`mutation SetIssueLabels($fullPath: ID!, $issueId: String!, $labelGraphQLIds: [ID!]) {
|
|
1042
|
+
updateIssue(input: { projectPath: $fullPath, iid: $issueId, labelIds: $labelGraphQLIds }) {
|
|
1043
|
+
issue {
|
|
1044
|
+
id
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
}`;if(!((p=(l=(u=(await y(this.config,{query:a,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,issueId:t.number,labelGraphQLIds:o}},e)).body.data)==null?void 0:u.updateIssue)==null?void 0:l.issue)!=null&&p.id))throw new Error("Could not set issue labels")}async setIssueMilestone(s,e={}){var u,l,p;let{issue:t,milestone:n}=s;if(!t.repository)throw new Error('GitLab requires "repository" for this function.');let o=`mutation SetIssueMilestone($fullPath: ID!, $issueId: String!, $milestoneId: ID) {
|
|
1048
|
+
updateIssue(input: { projectPath: $fullPath, iid: $issueId, milestoneId: $milestoneId }) {
|
|
1049
|
+
errors
|
|
1050
|
+
issue {
|
|
1051
|
+
id
|
|
1052
|
+
milestone {
|
|
1053
|
+
id
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
}`,a=await y(this.config,{query:o,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,issueId:t.number,milestoneId:(n==null?void 0:n.id)??null}},e),i=(u=a.body.data)==null?void 0:u.updateIssue;if(!((l=i==null?void 0:i.issue)!=null&&l.id)||a.body.errors||((p=i==null?void 0:i.errors)==null?void 0:p.length)!==0)throw new Error("Could not set milestone of issue")}async setIssueAssignees(s,e={}){var l,p,d;let{issue:t,assignees:n}=s;if(!t.repository)throw new Error('GitLab requires "repository" for this function.');let o=n.map(c=>c.username),a=`mutation SetIssueAssignees($fullPath: ID!, $issueId: String!, $assigneeUsernames: [String!]!) {
|
|
1058
|
+
issueSetAssignees(input: { projectPath: $fullPath, iid: $issueId, assigneeUsernames: $assigneeUsernames }) {
|
|
1059
|
+
errors,
|
|
1060
|
+
issue {
|
|
1061
|
+
id
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
}`,u=(l=(await y(this.config,{query:a,variables:{fullPath:`${t.repository.owner.login}/${t.repository.name}`,issueId:t.number,assigneeUsernames:o}},e)).body.data)==null?void 0:l.issueSetAssignees;if(!((p=u==null?void 0:u.issue)!=null&&p.id)||((d=u==null?void 0:u.errors)==null?void 0:d.length)!==0)throw new Error("Could not set issue assignees")}async getMilestonesForRepo(s,e={}){var i,u,l,p,d,c,g;let{repo:{namespace:t,name:n},cursor:o}=s,a=await y(this.config,{query:`
|
|
1065
|
+
query getLabelsForRepo(
|
|
1066
|
+
$fullPath: ID!
|
|
1067
|
+
$after: String
|
|
1068
|
+
) {
|
|
1069
|
+
project(
|
|
1070
|
+
fullPath: $fullPath
|
|
1071
|
+
) {
|
|
1072
|
+
webUrl
|
|
1073
|
+
milestones(after: $after) {
|
|
1074
|
+
nodes {
|
|
1075
|
+
${Xe}
|
|
1076
|
+
}
|
|
1077
|
+
pageInfo {
|
|
1078
|
+
endCursor
|
|
1079
|
+
hasNextPage
|
|
1080
|
+
}
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
`,variables:{fullPath:`${t}/${n}`,after:o}},e);return{pageInfo:((l=(u=(i=a.body.data)==null?void 0:i.project)==null?void 0:u.milestones)==null?void 0:l.pageInfo)??{endCursor:null,hasNextPage:!1},data:((g=(c=(d=(p=a.body.data)==null?void 0:p.project)==null?void 0:d.milestones)==null?void 0:c.nodes)==null?void 0:g.map(m=>{var h,b;return et(m,((b=(h=a.body.data)==null?void 0:h.project)==null?void 0:b.webUrl)||"")}))??[]}}async getLabelsForRepo(s,e={}){var i,u,l,p,d,c,g;let{repo:{namespace:t,name:n},cursor:o}=s,a=await y(this.config,{query:`
|
|
1085
|
+
query getLabelsForRepo(
|
|
1086
|
+
$fullPath: ID!
|
|
1087
|
+
$after: String
|
|
1088
|
+
) {
|
|
1089
|
+
project(
|
|
1090
|
+
fullPath: $fullPath
|
|
1091
|
+
) {
|
|
1092
|
+
labels(after: $after) {
|
|
1093
|
+
nodes {
|
|
1094
|
+
${Ze}
|
|
1095
|
+
}
|
|
1096
|
+
pageInfo {
|
|
1097
|
+
endCursor
|
|
1098
|
+
hasNextPage
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
`,variables:{fullPath:`${t}/${n}`,after:o}},e);return{pageInfo:((l=(u=(i=a.body.data)==null?void 0:i.project)==null?void 0:u.labels)==null?void 0:l.pageInfo)??{endCursor:null,hasNextPage:!1},data:((g=(c=(d=(p=a.body.data)==null?void 0:p.project)==null?void 0:d.labels)==null?void 0:c.nodes)==null?void 0:g.map(Ye))??[]}}};var xr="https://api.atlassian.com/ex/jira",be=100,tt=["assignee","comment","summary","created","creator","updated","votes","issuetype","status","labels","components","project","fixVersions","description"],rt=(r,s,e,t)=>{var i,u,l,p;let n=r.fields.assignee,o=!t,a=r.fields[(s==null?void 0:s.Sprint)??""]??[];return{id:r.id,commentCount:r.fields.comment.comments.length,number:r.key,title:r.fields.summary,url:e?`${e}/browse/${r.key}`:null,closedDate:null,createdDate:new Date(r.fields.created),author:ye(r.fields.creator,e,o),updatedDate:new Date(r.fields.updated),assignees:n?[ye(n,e,o)]:[],description:r.fields.description,repository:null,project:{name:r.fields.project.name,resourceId:t??null,key:r.fields.project.key,namespace:null,id:r.fields.project.id},state:Qr(r.fields.status),statusTransitions:((i=r.transitions)==null?void 0:i.map(kr))??[],components:((u=r.fields.components)==null?void 0:u.map(Nr))??[],type:r.fields.issuetype.name,upvoteCount:((l=r.fields.votes)==null?void 0:l.votes)||0,labels:((p=r.fields.labels)==null?void 0:p.map(d=>({color:null,description:null,id:null,name:d})))??[],sprints:a.map(_r),fixVersions:r.fields.fixVersions.map(Br)}},kr=r=>{let s;switch(r.to.statusCategory.name){case"To Do":s="TO_DO";break;case"In Progress":s="IN_PROGRESS";break;default:s="DONE";break}return{name:r.name,id:r.id,to:{id:r.to.id,name:r.to.name,color:r.to.statusCategory.colorName,category:s}}},Nr=r=>({description:r.description??null,id:r.id,name:r.name}),Fr=(r,s,e)=>e&&r.name?`${s}/secure/ViewProfile.jspa?name=${encodeURIComponent(r.name)}`:`${s}/jira/people/${r.accountId}`,ye=(r,s,e)=>({id:(e?r.key:r.accountId)??"",name:r.displayName,email:r.emailAddress,avatarUrl:r.avatarUrls["48x48"],username:r.displayName,url:Fr(r,s,e)}),Qr=r=>{let s;switch(r.statusCategory.name){case"To Do":s="TO_DO";break;case"In Progress":s="IN_PROGRESS";break;default:s="DONE";break}return{id:r.id,name:r.name,color:r.statusCategory.colorName,category:s}},_r=r=>({id:r.id.toString(),name:r.name,isActive:r.state==="active",startDate:r.startDate?new Date(r.startDate):null,endDate:r.endDate?new Date(r.endDate):null,completedDate:r.completeDate?new Date(r.completeDate):null}),Br=r=>({id:r.id,description:r.description,name:r.name,archived:r.archived,released:r.released,releaseDate:r.releaseDate?new Date(r.releaseDate):null}),_=(r,s,e)=>e?`${s.baseUrl||xr}/${e}`:`${(s==null?void 0:s.baseUrl)||r.baseUrl}`,we=async(r,s,e={})=>{let{resourceId:t}=s;return(await r.request({url:`${_(r,e,t)}/rest/api/2/field`,headers:I(e.token||r.token)})).body},Pe=async(r,s,e,t={})=>{let{number:n,resourceId:o,fields:a}=s||{},i=await r.request({url:`${_(r,t,o)}/rest/api/2/issue/${n}?fields=${tt.join(",")}&expand=transitions`,headers:I(t.token||r.token)});return{data:rt(i.body,a,e,o)}},Se=async(r,s,e,t={})=>{let{page:n,resourceId:o,labelNames:a,fields:i}=s||{},u=n??0,l=["statusCategory != Done",`(creator = currentUser() OR assignee = currentUser()
|
|
1104
|
+
OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUser())`];a&&a.forEach(m=>l.push(`labels = "${m}"`));let p=`${l.join(" AND ")} ORDER BY updated DESC`,c=(await r.request({url:`${_(r,t,o)}/rest/api/2/search?jql=${p}&startAt=${u}&maxResults=${be}&fields=${tt.join(",")}&expand=transitions`,headers:I(t.token||r.token)})).body.issues.map(m=>rt(m,i,e,o)),g=c.length==be;return{data:c,pageInfo:{hasNextPage:g,nextPage:g?u+c.length:null}}},Dt=async(r,s,e,t={})=>{let{page:n,resourceId:o,jql:a,fields:i}=s||{},u=n??0,l=[...tt],p=i==null?void 0:i.Sprint;p&&l.push(p);let c=(await r.request({url:`${_(r,t,o)}/rest/api/2/search?jql=${a.join(" AND ")}&startAt=${u}&maxResults=${be}&fields=${l.join(",")}&expand=transitions`,headers:I(t.token||r.token)})).body.issues.map(m=>rt(m,i,e,o)),g=c.length==be;return{data:c,pageInfo:{hasNextPage:g,nextPage:g?u+c.length:null}}},ve=async(r,s,e,t={})=>{let{assigneeLogins:n,authorLogin:o,mentionLogin:a,labelNames:i,page:u,projectKey:l,resourceId:p,fields:d}=s||{},c=u??0,g=[`project = "${l}"`,"statusCategory != Done"];return o&&g.push(`creator in ("${o}")`),n&&n.length!==0&&g.push(`assignee in ("${n.join('", "')}")`),a&&g.push(`comment ~ "${a}"`),i&&i.forEach(m=>g.push(`labels = "${m}"`)),Dt(r,{resourceId:p,jql:g,page:c,fields:d},e,t)},qe=async(r,s,e,t={})=>{let{assigneeLogins:n,authorLogin:o,mentionLogin:a,labelNames:i,page:u,projectKeys:l,resourceId:p,fields:d}=s||{},c=u??0,m=["("+l.map(h=>`project = "${h}"`).join(" OR ")+")","statusCategory != Done"];return o&&m.push(`creator in ("${o}")`),n&&n.length!==0&&m.push(`assignee in ("${n.join('", "')}")`),a&&m.push(`comment ~ "${a}"`),i&&i.forEach(h=>m.push(`labels = "${h}"`)),Dt(r,{resourceId:p,jql:m,fields:d,page:c},e,t)},Ee=async(r,s,e={})=>{let{issue:t,labels:n}=s;if(!t.project)throw new Error('Jira requires a "project" for this function.');let o={fields:{labels:n.map(a=>a.name)}};await r.request({method:"PUT",url:`${_(r,e,t.project.resourceId??void 0)}/rest/api/2/issue/${t.id}`,body:JSON.stringify(o),headers:{...I(e.token||r.token),"Content-Type":"application/json"}})},Ce=async(r,s,e={})=>{let{issue:t,components:n}=s;if(!t.project)throw new Error('Jira requires a "project" for this function.');let o={fields:{components:n.map(a=>({id:a.id}))}};await r.request({method:"PUT",url:`${_(r,e,t.project.resourceId??void 0)}/rest/api/2/issue/${t.id}`,body:JSON.stringify(o),headers:{...I(e.token||r.token),"Content-Type":"application/json"}})},Ue=async(r,s,e={})=>{let{issue:t,status:n}=s;if(!t.project)throw new Error('Jira requires a "project" for this function.');if(!n.id)throw new Error('Jira requires a status "id" for this function.');let o={transition:{id:n.id}};await r.request({method:"POST",url:`${_(r,e,t.project.resourceId??void 0)}/rest/api/2/issue/${t.id}/transitions`,body:JSON.stringify(o),headers:{...I(e.token||r.token),"Content-Type":"application/json"}})},De=async(r,s,e={})=>{let{resourceId:t,projectIdOrKey:n}=s,o=new URL(`${_(r,e,t)}/rest/api/2/project/${n}/components`);return{data:(await r.request({url:o.toString(),headers:I(e.token||r.token)})).body}};var se="https://api.atlassian.com/ex/jira",st=100,Y=class extends D{constructor(){super(...arguments);this._resourceUrlCache={};this._issueFieldsCache={}}async getIssueFieldsForResource(e,t={}){if(!this._issueFieldsCache[e.resourceId]){let n=await we(this.config,e,t);this._issueFieldsCache[e.resourceId]=n.reduce((o,a)=>({...o,[a.name]:a.id}),{})}return this._issueFieldsCache[e.resourceId]??null}async getResourceUrl(e,t={}){var a;let n=t.token||this.config.token;if(!n)return null;let o=this._resourceUrlCache[n];return o?o[e.resourceId]??null:(await this.getJiraResourcesForCurrentUser(t),((a=this._resourceUrlCache[n])==null?void 0:a[e.resourceId])??null)}async getCurrentUserForResource(e,t={}){let n=await this.getResourceUrl({resourceId:e.resourceId},t),o=await this.config.request({url:`${t.baseUrl||se}/${e.resourceId}/rest/api/2/myself`,headers:I(t.token||this.config.token)});return{data:{name:o.body.displayName,email:o.body.emailAddress,avatarUrl:o.body.avatarUrls["48x48"],id:o.body.accountId,username:o.body.displayName,url:n?`${n}/jira/people/${o.body.accountId}`:null}}}async getJiraResourcesForCurrentUser(e={}){let t=await this.config.request({url:`${e.baseUrl||"https://api.atlassian.com/"}/oauth/token/accessible-resources`,headers:I(e.token||this.config.token)}),n=e.token||this.config.token,o=n?this._resourceUrlCache[n]||{}:void 0,a=t.body.map(i=>(o&&(o[i.id]=i.url),{avatarUrl:i.avatarUrl,id:i.id,name:i.name,url:i.url}));return n&&(this._resourceUrlCache[n]=o),{data:a}}async getJiraProjectsForResource(e,t={}){let n=new URL(`${t.baseUrl||se}/${e.resourceId}/rest/api/2/project/search`);n.searchParams.set("maxResults",st.toString()),e.cursor&&n.searchParams.set("startAt",e.cursor);let o=await this.config.request({url:n.toString(),headers:I(t.token||this.config.token)});return{pageInfo:{hasNextPage:o.body.values.length!==0,endCursor:(o.body.startAt+o.body.values.length).toString()},data:o.body.values.map(a=>({id:a.id,key:a.key,name:a.name,resourceId:e.resourceId}))}}async getJiraProjectsForResources(e,t={}){let n=[];return await Promise.all(e.resourceIds.map(async o=>{try{return await pt(a=>this.getJiraProjectsForResource({resourceId:o,cursor:a},t))}catch{return[]}})).then((...o)=>{o.forEach(a=>{n=n.concat(...a)})}),{data:n}}async getAccountsForJiraProject(e,t={}){let{resourceId:n,projectKey:o,cursor:a}=e,i=await this.getResourceUrl({resourceId:n},t),u=new URL(`${t.baseUrl||se}/${n}/rest/api/2/user/assignable/search`);u.searchParams.set("maxResults",st.toString()),a&&u.searchParams.set("startAt",a),u.searchParams.set("project",o);let l=await this.config.request({url:u.toString(),headers:I(t.token||this.config.token)});return{pageInfo:{hasNextPage:l.body.length!==0,endCursor:((a?parseInt(a):0)+l.body.length).toString()},data:l.body.filter(p=>p.accountType!=="app"&&p.active).map(p=>ye(p,i,!1))}}async getComponentsForJiraProject(e,t={}){return await De(this.config,e,t)}async getIssue(e,t={}){let n=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await Pe(this.config,{...e,fields:n},o,t)}async getIssuesForProject(e,t={}){let n=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await ve(this.config,{...e,fields:n},o,t)}async getIssuesForProjects(e,t={}){let n=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await qe(this.config,{...e,fields:n},o,t)}async getIssuesForResourceForCurrentUser(e,t={}){let n=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await Se(this.config,{...e,fields:n},o,t)}async setIssueStatus(e,t={}){await Ue(this.config,e,t)}async setIssueAssignee(e,t={}){let{issue:n,assignee:o}=e;if(!n.project)throw new Error('Jira Cloud requires a "project" for this function.');if(!n.project.resourceId)throw new Error('Jira Cloud requires a project "resourceId" for this function.');let a={accountId:o==null?void 0:o.id};await this.config.request({method:"PUT",url:`${t.baseUrl||se}/${n.project.resourceId}/rest/api/2/issue/${n.id}/assignee`,body:JSON.stringify(a),headers:{...I(t.token||this.config.token),"Content-Type":"application/json"}})}async setIssueComponents(e,t={}){await Ce(this.config,e,t)}async setIssueLabels(e,t={}){await Ee(this.config,e,t)}async getLabelsForResource(e,t={}){let{resourceId:n,cursor:o}=e,a=new URL(`${t.baseUrl||se}/${n}/rest/api/2/label`);a.searchParams.set("maxResults",st.toString()),o&&a.searchParams.set("startAt",o);let i=await this.config.request({url:a.toString(),headers:I(t.token||this.config.token)});return{pageInfo:{hasNextPage:!i.body.isLast,endCursor:(i.body.startAt+i.body.values.length).toString()},data:i.body.values.map(u=>({color:null,description:null,id:null,name:u}))}}};var ee=class extends G{constructor(){super(...arguments);this._issueFieldsCache={}}async getIssueFieldsForResource(e={}){let t=(e==null?void 0:e.baseUrl)||this.config.baseUrl||"";if(!this._issueFieldsCache[t]){let n=await we(this.config,{},e);this._issueFieldsCache[t]=n.reduce((o,a)=>({...o,[a.name]:a.id}),{})}return this._issueFieldsCache[t]??null}async getCurrentUser(e={}){let t=await this.config.request({url:`${(e==null?void 0:e.baseUrl)||this.config.baseUrl}/rest/api/2/myself`,headers:I((e==null?void 0:e.token)||this.config.token)});return{data:{name:t.body.displayName,email:t.body.emailAddress,avatarUrl:t.body.avatarUrls["48x48"],id:t.body.key,username:t.body.displayName,url:null}}}async getJiraProjects(e={}){return{data:(await this.config.request({url:`${(e==null?void 0:e.baseUrl)||this.config.baseUrl}/rest/api/2/project`,headers:I((e==null?void 0:e.token)||this.config.token)})).body.map(n=>({id:n.id,name:n.name}))}}async getIssue(e,t={}){let n=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!n)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await Pe(this.config,{...e,fields:o},n,t)}async getIssuesForProject(e,t={}){let n=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!n)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await ve(this.config,{...e,fields:o},n,t)}async getIssuesForProjects(e,t={}){let n=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!n)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await qe(this.config,{...e,fields:o},n,t)}async getIssuesForResourceForCurrentUser(e,t={}){let n=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!n)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await Se(this.config,{...e,fields:o},n,t)}async setIssueStatus(e,t={}){await Ue(this.config,e,t)}async setIssueLabels(e,t={}){await Ee(this.config,e,t)}async setIssueComponents(e,t={}){await Ce(this.config,e,t)}async getLabels(e={}){return{data:(await this.config.request({url:`${(e==null?void 0:e.baseUrl)||this.config.baseUrl}/rest/api/2/jql/autocompletedata/suggestions?fieldName=labels`,headers:I(e.token||this.config.token)})).body.results.map(({displayName:n})=>({color:null,description:null,id:null,name:n}))}}async getComponentsForJiraProject(e,t={}){return await De(this.config,e,t)}};var T="https://api.trello.com",jr=1e3,Mr=r=>({id:r.id,username:r.username,url:r.url,name:r.fullName,email:r.email,avatarUrl:r.avatarUrl}),zr=(r,s)=>{let e=new Date(1e3*parseInt(r.id.substring(0,8),16));return{id:r.id,commentCount:r.badges.comments,number:r.idShort.toString(),title:r.name,url:r.url,closedDate:null,createdDate:new Date(e.toISOString()),author:null,updatedDate:new Date(r.dateLastActivity),assignees:r.members.map(t=>({id:t.id,username:t.username,name:t.fullName,email:null,avatarUrl:t.avatarUrl,url:null})),description:null,state:s[r.idList??""]?{id:r.idList,name:s[r.idList].name,color:null}:null,type:null,repository:null,upvoteCount:r.badges.votes,labels:r.labels.map(t=>({color:t.color,description:null,id:t.id,name:t.name}))}},te=class extends D{async getCurrentUser(s,e={}){let t=await this.config.request({url:`${e.baseUrl||T}/1/members/me?key=${s.appKey}&token=${e.token||this.config.token}`,headers:I(e.token||this.config.token)});return{data:{name:t.body.fullName,email:t.body.email,avatarUrl:t.body.avatarHash?`https://trello-members.s3.amazonaws.com/${t.body.id}/${t.body.avatarHash}/50.png`:null,id:t.body.id,username:t.body.username,url:t.body.url}}}async getBoardsForCurrentUser(s,e={}){return{data:(await this.config.request({url:`${e.baseUrl||T}/1/members/me/boards?fields=name&key=${s.appKey}&token=${e.token||this.config.token}&filter=open`,headers:I(e.token||this.config.token)})).body.map(n=>({id:n.id,name:n.name}))}}async getListsForTrelloBoard(s,e={}){let{appKey:t,boardId:n}=s;return{data:(await this.config.request({url:`${e.baseUrl||T}/1/boards/${n}/lists?key=${t}&token=${e.token||this.config.token}`,headers:I(e.token||this.config.token)})).body}}async getAccountForId(s,e={}){let{appKey:t,memberId:n}=s,o=await this.config.request({url:`${e.baseUrl||T}/1/members/${n}/?key=${t}&token=${e.token||this.config.token}`});return{data:Mr(o.body)}}async getAccountsForTrelloBoard(s,e={}){let{appKey:t,boardId:n}=s;return{data:(await this.config.request({url:`${e.baseUrl||T}/1/boards/${n}/members?key=${t}&token=${e.token||this.config.token}`,headers:I(e.token||this.config.token)})).body.map(a=>({id:a.id,name:a.fullName,username:a.username,email:null,avatarUrl:null,url:null}))}}async getIssuesForBoard(s,e={}){let t=["-is:archived","sort:edited"],{appKey:n,boardId:o,filterText:a,assigneeLogins:i,labelNamesOrColors:u,trelloBoardListsById:l}=s||{};i&&t.push("@me"),u&&u.forEach(c=>t.push(`label:"${c}"`));let p=`${a?`${a}`:""}${t.join(" ")} board:${o}`;return{data:(await this.config.request({url:`${e.baseUrl||T}/1/search?key=${n}&query=${p}&cards_limit=${jr}&token=${e.token||this.config.token}&card_members=true`,headers:I(e.token||this.config.token)})).body.cards.map(c=>zr(c,l||{}))}}async updateIssue(s,e,t,n){return await this.config.request({method:"PUT",url:`${n.baseUrl||T}/1/cards/${e.id}?key=${s}&token=${n.token||this.config.token}&${t}`,headers:I(n.token||this.config.token)})}async setIssueStatus(s,e={}){let{appKey:t,issue:n,status:o}=s;if(!o.id)throw new Error('Trello requires a status "id" for this function.');let a=`idList=${o.id}`;if(!(await this.updateIssue(t,n,a,e)).body.id)throw new Error("Could not set issue status")}async setIssueAssignees(s,e={}){let{appKey:t,issue:n,assignees:o}=s,a=o.map(l=>l.id),i=`idMembers=${encodeURIComponent(a.join(","))}`;if(!(await this.updateIssue(t,n,i,e)).body.id)throw new Error("Could not set issue status")}async setIssueLabels(s,e={}){let{appKey:t,issue:n,labels:o}=s,a=o.map(u=>u.id).join(",");if(!(await this.config.request({method:"PUT",url:`${e.baseUrl||T}/1/cards/${n.id}?key=${t}&token=${e.token||this.config.token}&idLabels=${encodeURIComponent(a)}`,headers:I(e.token||this.config.token)})).body.id)throw new Error("Could not set issue status")}async setIssueArchived(s,e={}){let{appKey:t,issue:n,archived:o}=s;if(!(await this.config.request({method:"PUT",url:`${e.baseUrl||T}/1/cards/${n.id}?key=${t}&token=${e.token||this.config.token}&closed=${o}`,headers:I(e.token||this.config.token)})).body.id)throw new Error("Could not update issue archived status")}async archiveIssue(s,e={}){await this.setIssueArchived({...s,archived:!0},e)}async unArchiveIssue(s,e={}){await this.setIssueArchived({...s,archived:!1},e)}async getLabelsForBoard(s,e={}){let{appKey:t,boardId:n}=s;return{data:(await this.config.request({url:`${e.baseUrl||T}/1/boards/${n}/labels?key=${t}&token=${e.token||this.config.token}`,headers:I(e.token||this.config.token)})).body.map(a=>({color:a.color,description:null,id:a.id,name:a.name}))}}};var Lt=r=>{let s={request:r==null?void 0:r.request};return{azureDevOps:new W({...s,...r==null?void 0:r.azureDevOps}),bitbucket:new J({...s,...r==null?void 0:r.bitbucket}),bitbucketServer:new K({...s,...r==null?void 0:r.bitbucketServer}),github:new V({...s,...r==null?void 0:r.github}),gitlab:new Z({...s,...r==null?void 0:r.gitlab}),jira:new Y({...s,...r==null?void 0:r.jira}),jiraServer:new ee({...s,...r==null?void 0:r.jiraServer}),trello:new te({...s,...r==null?void 0:r.trello})}};var $t=(a=>(a.Conflicts="conflicts",a.Failure="failure",a.NotSet="notSet",a.Queued="queued",a.RejectedByPolicy="rejectedByPolicy",a.Succeeded="succeeded",a))($t||{});var At=(e=>(e.Zero="0",e.One="1",e))(At||{}),Gt=(e=>(e.PullRequest="pr",e.Issue="issue",e))(Gt||{}),Tt=(p=>(p.Azure="azure",p.Github="github",p.GithubEnterprise="githubEnterprise",p.Gitlab="gitlab",p.GitlabSelfHosted="gitlabSelfHosted",p.Bitbucket="bitbucket",p.BitbucketServer="bitbucketServer",p.Jira="jira",p.JiraServer="jiraServer",p.Trello="trello",p))(Tt||{});var Ot=(e=>(e.Completed="COMPLETED",e.NotPlanned="NOT_PLANNED",e))(Ot||{});var Hr=Lt;
|