@gitkraken/provider-apis 0.8.1 → 0.8.2
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 +7 -0
- package/dist/index.js +101 -56
- package/dist/providers/bitbucket/bitbucket.d.ts +10 -25
- package/dist/providers/gitProvider.d.ts +9 -0
- package/dist/providers/github/github.d.ts +21 -1
- package/dist/providers/github/githubTypes.d.ts +8 -0
- package/dist/providers/gitlab/gitlab.d.ts +7 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.8.2
|
|
4
|
+
|
|
5
|
+
- added `getOrgsForCurrentUser` (GitHub)
|
|
6
|
+
- added `getReposForUsernames` (GitHub)
|
|
7
|
+
- added `getReposForOwners` (GitHub)
|
|
8
|
+
- added `getReposForCurrentUser` (GitLab and Bitbucket)
|
|
9
|
+
|
|
3
10
|
## 0.8.1
|
|
4
11
|
|
|
5
12
|
- fixed Jira and Trello not being properly exported
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
"use strict";var Te=Object.create;var W=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var qe=Object.getPrototypeOf,ke=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)W(e,r,{get:t[r],enumerable:!0})},ge=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of _e(t))!ke.call(e,s)&&s!==r&&W(e,s,{get:()=>t[s],enumerable:!(n=xe(t,s))||n.enumerable});return e};var Oe=(e,t,r)=>(r=e!=null?Te(qe(e)):{},ge(t||!e||!e.__esModule?W(r,"default",{value:e,enumerable:!0}):r,e)),Be=e=>ge(W({},"__esModule",{value:!0}),e);var Tt={};G(Tt,{AzureDevOps:()=>B,AzureDevopsUtils:()=>J,Bitbucket:()=>N,BitbucketServer:()=>j,BitbucketServerUtils:()=>K,BitbucketUtils:()=>X,GitHub:()=>F,GitHubUtils:()=>Z,GitLab:()=>z,GitLabUtils:()=>Y,Jira:()=>M,JiraUtils:()=>ee,Trello:()=>H,TrelloUtils:()=>te,Utils:()=>At,default:()=>Lt});module.exports=Be(Tt);var D=100;var he=Oe(require("node-fetch")),fe=globalThis.fetch||he.default;var Re=e=>e.name==="fetch";var Ne=async e=>{let t=e.headers.get("content-type")||"",r=null;if(t.startsWith("application/json"))r=await e.json();else if(t.startsWith("text/"))r=await e.text();else throw new Error(`Unsupported content-type: ${t}`);let n={body:r,headers:Object.fromEntries(e.headers.entries()),status:e.status,statusText:e.statusText};if(!e.ok){let s=new Error(e.statusText);throw Object.assign(s,{response:n}),s}return n},re=e=>Re(e)?async({url:t,...r})=>{let n=await e(t,r);return Ne(n)}:e;var C=class{constructor(t){this.config={...t,request:re((t==null?void 0:t.request)||fe)}}updateConfig(t){this.config={...this.config,...t,request:t.request?re(t.request):this.config.request}}},L=class extends C{};var y=(e,t)=>{let r={};return e&&(r.Authorization=`${t?"Basic":"Bearer"} ${e}`),r};var U=(e,t={})=>y(t.token||e.token,t.isPAT||e.isPAT);var je="https://app.vssps.visualstudio.com/_apis",A="https://dev.azure.com",Fe={active:"OPEN",completed:"MERGED",abandoned:"CLOSED"},Qe={10:"APPROVED",5:"APPROVED",0:"REVIEW_REQUESTED",[-5]:"CHANGES_REQUESTED",[-10]:"CHANGES_REQUESTED"},se=e=>({id:e.id,name:e.displayName,username:e.uniqueName||e.displayName,email:null,avatarUrl:e.imageUrl}),V=e=>e.startsWith("refs/heads/")?e.replace("refs/heads/",""):e,be=e=>({id:e.pullRequestId.toString(),title:e.title,number:e.codeReviewId,state:Fe[e.status],isDraft:e.isDraft,commentCount:null,upvoteCount:null,author:se(e.createdBy),createdDate:new Date(e.creationDate),updatedDate:new Date(e.closedDate||e.creationDate),closedDate:e.closedDate?new Date(e.closedDate):null,repository:{name:e.repository.name,owner:{login:void 0}},headCommit:{buildStatus:null},baseRef:{name:V(e.targetRefName)},headRef:{name:V(e.sourceRefName)},url:null,assignees:e.reviewers.map(se),reviews:e.reviewers.filter(t=>t.vote!==0).map(t=>({reviewer:se(t),state:Qe[t.vote]||"REVIEW_REQUESTED"})),additions:null,deletions:null,fileCount:null,commitCount:null,headRepository:null,mergeableState:"UNKNOWN"}),ye=(e,t)=>({id:t.id,name:t.name,namespace:e,project:t.project.name,webUrl:t.webUrl,httpsUrl:t.remoteUrl,sshUrl:t.sshUrl,defaultBranch:t.defaultBranch?{name:V(t.defaultBranch)}:null,permission:null}),ze=e=>{let t=e.fields,r=t["System.AssignedTo"];return{id:e.id.toString(),number:e.id.toString(),title:t["System.Title"],commentCount:t["System.CommentCount"],author:{avatarUrl:t["System.CreatedBy"]._links.avatar.href,email:null,id:t["System.CreatedBy"].id,name:t["System.CreatedBy"].uniqueName,username:t["System.CreatedBy"].displayName},createdDate:new Date(t["System.CreatedDate"]),updatedDate:new Date(t["System.ChangedDate"]),url:e._links.html.href,assignees:r?[{avatarUrl:r._links.avatar.href,email:null,id:r.id,name:r.uniqueName,username:r.displayName}]:[],description:null,state:null,repository:null,upvoteCount:0}},B=class extends C{async getCurrentUser(t={}){if(t.isPAT||this.config.isPAT)throw new Error("Azure DevOps does not support PATs for this function.");let r=await this.config.request({url:`${je}/profile/profiles/me`,headers:U(this.config,t)});return{data:{id:r.body.id,name:r.body.displayName,username:r.body.displayName,email:r.body.emailAddress,avatarUrl:null}}}async getCurrentUserForInstance(t,r={}){let s=(await this.config.request({url:`${A}/${encodeURIComponent(t.namespace)}/_apis/ConnectionData`,headers:U(this.config,r)})).body.authorizedUser;if(s.providerDisplayName==="Anonymous")throw new Error("Current user not found.");return{data:{id:s.id,name:s.providerDisplayName,username:s.providerDisplayName,email:s.properties.Account.$value,avatarUrl:null}}}async getUserForCommit(t,r={}){if(!t.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=(await this.config.request({url:`${A}/${encodeURIComponent(t.repo.namespace)}/${encodeURIComponent(t.repo.project)}/_apis/git/repositories/${encodeURIComponent(t.repo.name)}/commits/${t.oid}`,headers:U(this.config,r)})).body.author;return{data:{name:s.name,email:s.email,avatarUrl:s.imageUrl}}}async getRepo(t,r={}){if(!t.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let n=await this.config.request({url:`${A}/${encodeURIComponent(t.namespace)}/${encodeURIComponent(t.project)}/_apis/git/repositories/${encodeURIComponent(t.name)}`,headers:U(this.config,r)});return{data:ye(t.namespace,n.body)}}async getRepos(t,r={}){return{data:(await Promise.all(t.map(s=>this.getRepo(s,r)))).map(s=>s.data)}}async getReposForAzureProject(t,r={}){if(!t.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');return{data:(await this.config.request({url:`${A}/${encodeURIComponent(t.namespace)}/${encodeURIComponent(t.project)}/_apis/git/repositories`,headers:U(this.config,r)})).body.value.map(s=>ye(t.namespace,s))}}async getRefs(t,r,n={}){if(!r.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=new URL(`${A}/${encodeURIComponent(r.repo.namespace)}/${encodeURIComponent(r.repo.project)}/_apis/git/repositories/${encodeURIComponent(r.repo.name)}/refs`);s.searchParams.set("filter",t),s.searchParams.set("$top",D.toString()),r.cursor&&s.searchParams.set("continuationToken",r.cursor);let o=await this.config.request({url:s.toString(),headers:U(this.config,n)}),a=o.headers["x-ms-continuationtoken"];return{pageInfo:{hasNextPage:!!a,endCursor:a||null},data:o.body.value.map(i=>({name:V(i.name),commit:{oid:i.objectId,authoredDate:null,committedDate:null}}))}}async getBranches(t,r={}){return this.getRefs("heads",t,r)}async getTags(t,r={}){return this.getRefs("tags",t,r)}async getPullRequestsForRepoBase(t,r={},n=100){let{page:s,repo:o,assigneeLogins:a,authorLogin:i}=t||{},u=s||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:`${r.baseUrl||A}/${encodeURIComponent(o.namespace)}/${encodeURIComponent(o.project||"")}/_apis/git/repositories/${encodeURIComponent(o.name)}/pullRequests?${l}&%24top=${n}&%24skip=${(u-1)*n}`,headers:U(this.config,r)})}async getPullRequestsForRepo(t,r={}){let s=t.page||1,o=await this.getPullRequestsForRepoBase(t,r,100);return{pageInfo:{hasNextPage:o.body.value.length===100,nextPage:s+1},data:o.body.value.map(be)}}async getPullRequestsForRepos(t,r={}){if(!t.repos.every(o=>o.project))throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{repos:n}=t||{},s=[];return await Promise.all(n.map(async o=>{try{(await this.getPullRequestsForRepoBase({repo:o,...t},r)).body.value.forEach(i=>{s.push(be(i))})}catch(a){if(a.statusCode!==404&&a.statusCode!==401)throw a}})),{data:s}}async getIssuesForAzureProject(t,r={}){let{page:n,assigneeLogins:s,authorLogin:o,mentionLogin:a}=t||{},i=n||1,u=200,l=["[Microsoft.VSTS.Common.ClosedDate] = ''","[System.TeamProject] = @project","[Microsoft.VSTS.Common.ResolvedDate] = ''"];o&&l.push(`[System.CreatedBy] = '${o.replace("'","''")}'`),s&&s[0]&&l.push(`[System.AssignedTo] = '${s[0].replace("'","''")}'`),a&&l.push("[System.Id] IN (@recentMentions)");let p=`Select [Microsoft.VSTS.Common.ClosedDate], [Microsoft.VSTS.Common.ResolvedDate] From WorkItems Where ${l.join(" AND ")} order by [System.CreatedDate] desc`,m=await this.config.request({url:`${r.baseUrl||A}/${encodeURIComponent(t.namespace)}/${encodeURIComponent(t.project)}/_apis/wit/wiql?api-version=6.0`,body:JSON.stringify({query:p}),method:"POST",headers:{...U(this.config,r),"Content-Type":"application/json"}}),c=m.body.workItems.slice((i-1)*u,u*i).map(g=>g.id),d=await this.config.request({url:`${r.baseUrl||A}/${encodeURIComponent(t.namespace)}/${encodeURIComponent(t.project)}/_apis/wit/workitemsbatch?api-version=6.0`,body:JSON.stringify({ids:c,$expand:"Links"}),method:"POST",headers:{...U(this.config,r),"Content-Type":"application/json"}});return{pageInfo:{hasNextPage:m.body.workItems.length>u*i,nextPage:i+1},data:d.body.value.map(ze)}}};var x=(e,t={})=>y(t.token||e.token,t.isPAT||e.isPAT);var q="https://api.bitbucket.org/2.0",Me={OPEN:"OPEN",MERGED:"MERGED",DECLINED:"CLOSED"},ve=e=>({id:e.uuid,name:e.display_name||e.nickname,username:e.nickname||e.display_name,email:null,avatarUrl:e.links.avatar.href}),Pe=e=>{let t=e.id;return{id:t.toString(),title:e.title,number:t,state:Me[e.state],isDraft:!1,commentCount:e.comment_count,upvoteCount:null,author:ve(e.author),createdDate:new Date(e.created_on),updatedDate:new Date(e.updated_on),closedDate:null,repository:{name:e.source.repository.name,owner:{login:void 0}},headCommit:{buildStatus:null},baseRef:{name:e.destination.branch.name},headRef:{name:e.source.branch.name},url:e.links.html.href,assignees:null,reviews:null,additions:null,deletions:null,fileCount:null,commitCount:null,headRepository:null,mergeableState:"UNKNOWN"}},N=class extends C{async refreshToken(t){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 ${t.base64ClientIDColonClientSecret}`},body:`grant_type=refresh_token&refresh_token=${t.refreshToken}`})).body}}async getCurrentUser(t={}){let r=await this.config.request({url:`${q}/user`,headers:x(this.config,t)});return{data:ve(r.body)}}async getUserForCommit(t,r={}){var a;let s=(await this.config.request({url:`${q}/repositories/${t.repo.namespace}/${t.repo.name}/commit/${t.oid}`,headers:x(this.config,r)})).body.author,o=s.raw.match(/([^<]+)<(.+)>/);return{data:{name:o?o[1].trim():null,email:o?o[2]:null,avatarUrl:((a=s.user)==null?void 0:a.links.avatar.href)||null}}}async getRepo(t,r={}){var s,o;let n=await this.config.request({url:`${q}/repositories/${t.namespace}/${t.name}`,headers:x(this.config,r)});return{data:{id:n.body.uuid,namespace:n.body.workspace.slug,name:n.body.slug,webUrl:n.body.links.html.href,httpsUrl:((s=n.body.links.clone.find(a=>a.name==="https"))==null?void 0:s.href)??null,sshUrl:((o=n.body.links.clone.find(a=>a.name==="ssh"))==null?void 0:o.href)??null,defaultBranch:{name:n.body.mainbranch.name},permission:null}}}async getRepos(t,r={}){return{data:(await Promise.all(t.map(s=>this.getRepo(s,r)))).map(s=>s.data)}}async getBranches(t,r={}){var a;let n=new URL(`${q}/repositories/${t.repo.namespace}/${t.repo.name}/refs/branches`);n.searchParams.set("page",((a=t.page)==null?void 0:a.toString())||"1"),n.searchParams.set("pagelen",D.toString());let s=await this.config.request({url:n.toString(),headers:x(this.config,r)}),o=!!s.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.page+1:null},data:s.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(t,r={}){let n=new URL(`${q}/repositories/${t.repo.namespace}/${t.repo.name}/refs/tags`);n.searchParams.set("pagelen",D.toString()),t.cursor&&n.searchParams.set("page",t.cursor);let s=await this.config.request({url:n.toString(),headers:x(this.config,r)}),o=!!s.body.next,a=null;return s.body.next&&(a=new URL(s.body.next).searchParams.get("page")),{pageInfo:{hasNextPage:o,endCursor:a},data:s.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 getPullRequestsForRepoBase(t,r={}){var s;let n=new URL(`${q}/repositories/${encodeURI(t.repo.namespace)}/${encodeURI(t.repo.name)}/pullrequests?state=OPEN`);return n.searchParams.set("page",((s=t.page)==null?void 0:s.toString())||"1"),n.searchParams.set("pagelen","50"),await this.config.request({url:n.toString(),headers:x(this.config,r)})}async getPullRequestsForRepo(t,r={}){let n=[],s=await this.getPullRequestsForRepoBase(t,r);s.body.values.forEach(a=>{if(t.authorLogin&&a.author.uuid!==t.authorLogin)return null;n.push(Pe(a))});let o=!!s.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.page+1:null},data:n}}async getPullRequestsForRepos(t,r={}){let n=[];return await Promise.all(t.repos.map(async s=>{try{(await this.getPullRequestsForRepoBase({repo:s,...t},r)).body.values.forEach(a=>{if(t.authorLogin&&a.author.uuid!==t.authorLogin)return null;n.push(Pe(a))})}catch(o){if(o.statusCode!==404&&o.statusCode!==401)throw o}})),{data:n}}};var j=class extends L{getBaseUrl(t){let r=t.baseUrl||this.config.baseUrl;if(!r)throw new Error('Bitbucket Server requires "baseUrl"');return r}getRequestHeaders(t){return y(t.token||this.config.token)}async getRepo(t,r={}){var s,o,a;let n=await this.config.request({url:`${this.getBaseUrl(r)}/projects/${t.namespace}/repos/${t.name}`,headers:this.getRequestHeaders(r)});return{data:{id:n.body.id.toString(),namespace:n.body.project.key,name:n.body.slug,webUrl:((s=n.body.links.self[0])==null?void 0:s.href)??null,httpsUrl:((o=n.body.links.clone.find(i=>i.name==="https"))==null?void 0:o.href)??null,sshUrl:((a=n.body.links.clone.find(i=>i.name==="ssh"))==null?void 0:a.href)??null,defaultBranch:null,permission:null}}}async getRepos(t,r={}){return{data:(await Promise.all(t.map(s=>this.getRepo(s,r)))).map(s=>s.data)}}};var ae="https://api.github.com",He=`${ae}/graphql`,Ce=/\/api\/v\d+$/,We=e=>{if(e.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.")},Ve=(e,t)=>{let r=t.baseUrl||e.baseUrl;return r?(r=r.replace(/\/$/,""),We(r),Ce.test(r)&&(r=r.replace(Ce,"")),`${r}/api/graphql`):He},P=(e,t,r)=>{let n=y(r.token||e.token);return n["X-Github-Next-Global-ID"]="1",n["Content-Type"]="application/json",e.request({url:Ve(e,r),method:"POST",headers:n,body:JSON.stringify(t)})},Je={user:!0,"user:email":!0,"read:user":!0},k=e=>e.some(t=>Je[t]),w=(e=!1,t=!1)=>`
|
|
1
|
+
"use strict";var xe=Object.create;var W=Object.defineProperty;var qe=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,ke=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)W(e,r,{get:t[r],enumerable:!0})},be=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of _e(t))!ke.call(e,s)&&s!==r&&W(e,s,{get:()=>t[s],enumerable:!(n=qe(t,s))||n.enumerable});return e};var Be=(e,t,r)=>(r=e!=null?xe(Oe(e)):{},be(t||!e||!e.__esModule?W(r,"default",{value:e,enumerable:!0}):r,e)),Ne=e=>be(W({},"__esModule",{value:!0}),e);var xt={};G(xt,{AzureDevOps:()=>B,AzureDevopsUtils:()=>J,Bitbucket:()=>N,BitbucketServer:()=>j,BitbucketServerUtils:()=>K,BitbucketUtils:()=>X,GitHub:()=>F,GitHubUtils:()=>Z,GitLab:()=>z,GitLabUtils:()=>Y,Jira:()=>M,JiraUtils:()=>ee,Trello:()=>H,TrelloUtils:()=>te,Utils:()=>Tt,default:()=>At});module.exports=Ne(xt);var C=100;var ye=Be(require("node-fetch")),Ie=globalThis.fetch||ye.default;var Pe=e=>e.name==="fetch";var je=async e=>{let t=e.headers.get("content-type")||"",r=null;if(t.startsWith("application/json"))r=await e.json();else if(t.startsWith("text/"))r=await e.text();else throw new Error(`Unsupported content-type: ${t}`);let n={body:r,headers:Object.fromEntries(e.headers.entries()),status:e.status,statusText:e.statusText};if(!e.ok){let s=new Error(e.statusText);throw Object.assign(s,{response:n}),s}return n},re=e=>Pe(e)?async({url:t,...r})=>{let n=await e(t,r);return je(n)}:e;var w=class{constructor(t){this.config={...t,request:re((t==null?void 0:t.request)||Ie)}}updateConfig(t){this.config={...this.config,...t,request:t.request?re(t.request):this.config.request}}},L=class extends w{};var y=(e,t)=>{let r={};return e&&(r.Authorization=`${t?"Basic":"Bearer"} ${e}`),r};var U=(e,t={})=>y(t.token||e.token,t.isPAT||e.isPAT);var Fe="https://app.vssps.visualstudio.com/_apis",A="https://dev.azure.com",Qe={active:"OPEN",completed:"MERGED",abandoned:"CLOSED"},ze={10:"APPROVED",5:"APPROVED",0:"REVIEW_REQUESTED",[-5]:"CHANGES_REQUESTED",[-10]:"CHANGES_REQUESTED"},se=e=>({id:e.id,name:e.displayName,username:e.uniqueName||e.displayName,email:null,avatarUrl:e.imageUrl}),V=e=>e.startsWith("refs/heads/")?e.replace("refs/heads/",""):e,ve=e=>({id:e.pullRequestId.toString(),title:e.title,number:e.codeReviewId,state:Qe[e.status],isDraft:e.isDraft,commentCount:null,upvoteCount:null,author:se(e.createdBy),createdDate:new Date(e.creationDate),updatedDate:new Date(e.closedDate||e.creationDate),closedDate:e.closedDate?new Date(e.closedDate):null,repository:{name:e.repository.name,owner:{login:void 0}},headCommit:{buildStatus:null},baseRef:{name:V(e.targetRefName)},headRef:{name:V(e.sourceRefName)},url:null,assignees:e.reviewers.map(se),reviews:e.reviewers.filter(t=>t.vote!==0).map(t=>({reviewer:se(t),state:ze[t.vote]||"REVIEW_REQUESTED"})),additions:null,deletions:null,fileCount:null,commitCount:null,headRepository:null,mergeableState:"UNKNOWN"}),Ce=(e,t)=>({id:t.id,name:t.name,namespace:e,project:t.project.name,webUrl:t.webUrl,httpsUrl:t.remoteUrl,sshUrl:t.sshUrl,defaultBranch:t.defaultBranch?{name:V(t.defaultBranch)}:null,permission:null}),Me=e=>{let t=e.fields,r=t["System.AssignedTo"];return{id:e.id.toString(),number:e.id.toString(),title:t["System.Title"],commentCount:t["System.CommentCount"],author:{avatarUrl:t["System.CreatedBy"]._links.avatar.href,email:null,id:t["System.CreatedBy"].id,name:t["System.CreatedBy"].uniqueName,username:t["System.CreatedBy"].displayName},createdDate:new Date(t["System.CreatedDate"]),updatedDate:new Date(t["System.ChangedDate"]),url:e._links.html.href,assignees:r?[{avatarUrl:r._links.avatar.href,email:null,id:r.id,name:r.uniqueName,username:r.displayName}]:[],description:null,state:null,repository:null,upvoteCount:0}},B=class extends w{async getCurrentUser(t={}){if(t.isPAT||this.config.isPAT)throw new Error("Azure DevOps does not support PATs for this function.");let r=await this.config.request({url:`${Fe}/profile/profiles/me`,headers:U(this.config,t)});return{data:{id:r.body.id,name:r.body.displayName,username:r.body.displayName,email:r.body.emailAddress,avatarUrl:null}}}async getCurrentUserForInstance(t,r={}){let s=(await this.config.request({url:`${A}/${encodeURIComponent(t.namespace)}/_apis/ConnectionData`,headers:U(this.config,r)})).body.authorizedUser;if(s.providerDisplayName==="Anonymous")throw new Error("Current user not found.");return{data:{id:s.id,name:s.providerDisplayName,username:s.providerDisplayName,email:s.properties.Account.$value,avatarUrl:null}}}async getUserForCommit(t,r={}){if(!t.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=(await this.config.request({url:`${A}/${encodeURIComponent(t.repo.namespace)}/${encodeURIComponent(t.repo.project)}/_apis/git/repositories/${encodeURIComponent(t.repo.name)}/commits/${t.oid}`,headers:U(this.config,r)})).body.author;return{data:{name:s.name,email:s.email,avatarUrl:s.imageUrl}}}async getRepo(t,r={}){if(!t.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let n=await this.config.request({url:`${A}/${encodeURIComponent(t.namespace)}/${encodeURIComponent(t.project)}/_apis/git/repositories/${encodeURIComponent(t.name)}`,headers:U(this.config,r)});return{data:Ce(t.namespace,n.body)}}async getRepos(t,r={}){return{data:(await Promise.all(t.map(s=>this.getRepo(s,r)))).map(s=>s.data)}}async getReposForAzureProject(t,r={}){if(!t.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');return{data:(await this.config.request({url:`${A}/${encodeURIComponent(t.namespace)}/${encodeURIComponent(t.project)}/_apis/git/repositories`,headers:U(this.config,r)})).body.value.map(s=>Ce(t.namespace,s))}}async getRefs(t,r,n={}){if(!r.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=new URL(`${A}/${encodeURIComponent(r.repo.namespace)}/${encodeURIComponent(r.repo.project)}/_apis/git/repositories/${encodeURIComponent(r.repo.name)}/refs`);s.searchParams.set("filter",t),s.searchParams.set("$top",C.toString()),r.cursor&&s.searchParams.set("continuationToken",r.cursor);let o=await this.config.request({url:s.toString(),headers:U(this.config,n)}),a=o.headers["x-ms-continuationtoken"];return{pageInfo:{hasNextPage:!!a,endCursor:a||null},data:o.body.value.map(i=>({name:V(i.name),commit:{oid:i.objectId,authoredDate:null,committedDate:null}}))}}async getBranches(t,r={}){return this.getRefs("heads",t,r)}async getTags(t,r={}){return this.getRefs("tags",t,r)}async getPullRequestsForRepoBase(t,r={},n=100){let{page:s,repo:o,assigneeLogins:a,authorLogin:i}=t||{},u=s||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:`${r.baseUrl||A}/${encodeURIComponent(o.namespace)}/${encodeURIComponent(o.project||"")}/_apis/git/repositories/${encodeURIComponent(o.name)}/pullRequests?${l}&%24top=${n}&%24skip=${(u-1)*n}`,headers:U(this.config,r)})}async getPullRequestsForRepo(t,r={}){let s=t.page||1,o=await this.getPullRequestsForRepoBase(t,r,100);return{pageInfo:{hasNextPage:o.body.value.length===100,nextPage:s+1},data:o.body.value.map(ve)}}async getPullRequestsForRepos(t,r={}){if(!t.repos.every(o=>o.project))throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{repos:n}=t||{},s=[];return await Promise.all(n.map(async o=>{try{(await this.getPullRequestsForRepoBase({repo:o,...t},r)).body.value.forEach(i=>{s.push(ve(i))})}catch(a){if(a.statusCode!==404&&a.statusCode!==401)throw a}})),{data:s}}async getIssuesForAzureProject(t,r={}){let{page:n,assigneeLogins:s,authorLogin:o,mentionLogin:a}=t||{},i=n||1,u=200,l=["[Microsoft.VSTS.Common.ClosedDate] = ''","[System.TeamProject] = @project","[Microsoft.VSTS.Common.ResolvedDate] = ''"];o&&l.push(`[System.CreatedBy] = '${o.replace("'","''")}'`),s&&s[0]&&l.push(`[System.AssignedTo] = '${s[0].replace("'","''")}'`),a&&l.push("[System.Id] IN (@recentMentions)");let p=`Select [Microsoft.VSTS.Common.ClosedDate], [Microsoft.VSTS.Common.ResolvedDate] From WorkItems Where ${l.join(" AND ")} order by [System.CreatedDate] desc`,g=await this.config.request({url:`${r.baseUrl||A}/${encodeURIComponent(t.namespace)}/${encodeURIComponent(t.project)}/_apis/wit/wiql?api-version=6.0`,body:JSON.stringify({query:p}),method:"POST",headers:{...U(this.config,r),"Content-Type":"application/json"}}),m=g.body.workItems.slice((i-1)*u,u*i).map(c=>c.id),d=await this.config.request({url:`${r.baseUrl||A}/${encodeURIComponent(t.namespace)}/${encodeURIComponent(t.project)}/_apis/wit/workitemsbatch?api-version=6.0`,body:JSON.stringify({ids:m,$expand:"Links"}),method:"POST",headers:{...U(this.config,r),"Content-Type":"application/json"}});return{pageInfo:{hasNextPage:g.body.workItems.length>u*i,nextPage:i+1},data:d.body.value.map(Me)}}};var T=(e,t={})=>y(t.token||e.token,t.isPAT||e.isPAT);var q="https://api.bitbucket.org/2.0",He={OPEN:"OPEN",MERGED:"MERGED",DECLINED:"CLOSED"},Se=e=>({id:e.uuid,name:e.display_name||e.nickname,username:e.nickname||e.display_name,email:null,avatarUrl:e.links.avatar.href}),Ue=e=>{var t,r;return{id:e.uuid,namespace:e.workspace.slug,name:e.slug,webUrl:e.links.html.href,httpsUrl:((t=e.links.clone.find(n=>n.name==="https"))==null?void 0:t.href)??null,sshUrl:((r=e.links.clone.find(n=>n.name==="ssh"))==null?void 0:r.href)??null,defaultBranch:{name:e.mainbranch.name},permission:null}},Ee=e=>{let t=e.id;return{id:t.toString(),title:e.title,number:t,state:He[e.state],isDraft:!1,commentCount:e.comment_count,upvoteCount:null,author:Se(e.author),createdDate:new Date(e.created_on),updatedDate:new Date(e.updated_on),closedDate:null,repository:{name:e.source.repository.name,owner:{login:void 0}},headCommit:{buildStatus:null},baseRef:{name:e.destination.branch.name},headRef:{name:e.source.branch.name},url:e.links.html.href,assignees:null,reviews:null,additions:null,deletions:null,fileCount:null,commitCount:null,headRepository:null,mergeableState:"UNKNOWN"}},N=class extends w{async refreshToken(t){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 ${t.base64ClientIDColonClientSecret}`},body:`grant_type=refresh_token&refresh_token=${t.refreshToken}`})).body}}async getCurrentUser(t={}){let r=await this.config.request({url:`${q}/user`,headers:T(this.config,t)});return{data:Se(r.body)}}async getUserForCommit(t,r={}){var a;let s=(await this.config.request({url:`${q}/repositories/${t.repo.namespace}/${t.repo.name}/commit/${t.oid}`,headers:T(this.config,r)})).body.author,o=s.raw.match(/([^<]+)<(.+)>/);return{data:{name:o?o[1].trim():null,email:o?o[2]:null,avatarUrl:((a=s.user)==null?void 0:a.links.avatar.href)||null}}}async getRepo(t,r={}){let n=await this.config.request({url:`${q}/repositories/${t.namespace}/${t.name}`,headers:T(this.config,r)});return{data:Ue(n.body)}}async getRepos(t,r={}){return{data:(await Promise.all(t.map(s=>this.getRepo(s,r)))).map(s=>s.data)}}async getReposForCurrentUser(t={},r={}){let n=new URL(`${q}/repositories`);n.searchParams.set("role","member"),n.searchParams.set("pagelen",C.toString()),t.cursor&&n.searchParams.set("after",t.cursor);let s=await this.config.request({url:n.toString(),headers:T(this.config,r)}),o=!!s.body.next,a=null;return s.body.next&&(a=new URL(s.body.next).searchParams.get("after")),{pageInfo:{hasNextPage:o,endCursor:a},data:s.body.values.map(Ue)}}async getBranches(t,r={}){var a;let n=new URL(`${q}/repositories/${t.repo.namespace}/${t.repo.name}/refs/branches`);n.searchParams.set("page",((a=t.page)==null?void 0:a.toString())||"1"),n.searchParams.set("pagelen",C.toString());let s=await this.config.request({url:n.toString(),headers:T(this.config,r)}),o=!!s.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.page+1:null},data:s.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(t,r={}){let n=new URL(`${q}/repositories/${t.repo.namespace}/${t.repo.name}/refs/tags`);n.searchParams.set("pagelen",C.toString()),t.cursor&&n.searchParams.set("page",t.cursor);let s=await this.config.request({url:n.toString(),headers:T(this.config,r)}),o=!!s.body.next,a=null;return s.body.next&&(a=new URL(s.body.next).searchParams.get("page")),{pageInfo:{hasNextPage:o,endCursor:a},data:s.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 getPullRequestsForRepoBase(t,r={}){var s;let n=new URL(`${q}/repositories/${encodeURI(t.repo.namespace)}/${encodeURI(t.repo.name)}/pullrequests?state=OPEN`);return n.searchParams.set("page",((s=t.page)==null?void 0:s.toString())||"1"),n.searchParams.set("pagelen","50"),await this.config.request({url:n.toString(),headers:T(this.config,r)})}async getPullRequestsForRepo(t,r={}){let n=[],s=await this.getPullRequestsForRepoBase(t,r);s.body.values.forEach(a=>{if(t.authorLogin&&a.author.uuid!==t.authorLogin)return null;n.push(Ee(a))});let o=!!s.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.page+1:null},data:n}}async getPullRequestsForRepos(t,r={}){let n=[];return await Promise.all(t.repos.map(async s=>{try{(await this.getPullRequestsForRepoBase({repo:s,...t},r)).body.values.forEach(a=>{if(t.authorLogin&&a.author.uuid!==t.authorLogin)return null;n.push(Ee(a))})}catch(o){if(o.statusCode!==404&&o.statusCode!==401)throw o}})),{data:n}}};var j=class extends L{getBaseUrl(t){let r=t.baseUrl||this.config.baseUrl;if(!r)throw new Error('Bitbucket Server requires "baseUrl"');return r}getRequestHeaders(t){return y(t.token||this.config.token)}async getRepo(t,r={}){var s,o,a;let n=await this.config.request({url:`${this.getBaseUrl(r)}/projects/${t.namespace}/repos/${t.name}`,headers:this.getRequestHeaders(r)});return{data:{id:n.body.id.toString(),namespace:n.body.project.key,name:n.body.slug,webUrl:((s=n.body.links.self[0])==null?void 0:s.href)??null,httpsUrl:((o=n.body.links.clone.find(i=>i.name==="https"))==null?void 0:o.href)??null,sshUrl:((a=n.body.links.clone.find(i=>i.name==="ssh"))==null?void 0:a.href)??null,defaultBranch:null,permission:null}}}async getRepos(t,r={}){return{data:(await Promise.all(t.map(s=>this.getRepo(s,r)))).map(s=>s.data)}}};var ae="https://api.github.com",We=`${ae}/graphql`,De=/\/api\/v\d+$/,Ve=e=>{if(e.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.")},Je=(e,t)=>{let r=t.baseUrl||e.baseUrl;return r?(r=r.replace(/\/$/,""),Ve(r),De.test(r)&&(r=r.replace(De,"")),`${r}/api/graphql`):We},I=(e,t,r)=>{let n=y(r.token||e.token);return n["X-Github-Next-Global-ID"]="1",n["Content-Type"]="application/json",e.request({url:Je(e,r),method:"POST",headers:n,body:JSON.stringify(t)})},Xe={user:!0,"user:email":!0,"read:user":!0},O=e=>e.some(t=>Xe[t]),E=(e=!1,t=!1)=>`
|
|
2
2
|
id
|
|
3
3
|
databaseId
|
|
4
4
|
name
|
|
5
5
|
login
|
|
6
6
|
${t?"email":""}
|
|
7
7
|
avatarUrl${e?"(size: $avatarSize)":""}
|
|
8
|
-
`,
|
|
8
|
+
`,Ke=(e,t=!1)=>`
|
|
9
9
|
id
|
|
10
10
|
databaseId
|
|
11
11
|
number
|
|
@@ -13,7 +13,7 @@ title
|
|
|
13
13
|
state
|
|
14
14
|
author {
|
|
15
15
|
... on User {
|
|
16
|
-
${
|
|
16
|
+
${E(!1,t)}
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
commits(last: 1) {
|
|
@@ -73,7 +73,7 @@ updatedAt
|
|
|
73
73
|
closedAt
|
|
74
74
|
assignees(first: 100) {
|
|
75
75
|
nodes {
|
|
76
|
-
${
|
|
76
|
+
${E(!1,t)}
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
reviewRequests(first: 100) {
|
|
@@ -81,7 +81,7 @@ reviewRequests(first: 100) {
|
|
|
81
81
|
asCodeOwner
|
|
82
82
|
requestedReviewer {
|
|
83
83
|
... on User {
|
|
84
|
-
${
|
|
84
|
+
${E(!1,t)}
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
}
|
|
@@ -90,7 +90,7 @@ latestReviews(first: 100) {
|
|
|
90
90
|
nodes {
|
|
91
91
|
author {
|
|
92
92
|
... on User {
|
|
93
|
-
${
|
|
93
|
+
${E(!1,t)}
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
state
|
|
@@ -100,7 +100,7 @@ additions
|
|
|
100
100
|
deletions
|
|
101
101
|
changedFiles
|
|
102
102
|
mergeable
|
|
103
|
-
`,
|
|
103
|
+
`,Ze={"-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"},Ye=new RegExp('(([^\\s]+:)?\\"(?:[^\\"\\\\]|\\\\.)*\\"?)|([^\\"\\s]+)',"g"),ie=e=>{let t=[];return(e.match(Ye)??[]).forEach(n=>{if(n.includes(":")&&n!="is:closed"){let s=n.split(":")[0];Ze[s]&&t.push(n)}}),t},ue=async(e,t,r,n=!0,s=!1)=>{let{cursor:o,assigneeLogins:a,updatedBefore:i,isDraft:u,authorLogin:l,repos:p,reviewRequestedLogin:g,startQuery:m,mentionLogin:d}=t||{},c=ie(m||"");p.forEach(f=>{c.push(`repo:${f.namespace}/${f.name}`)}),a&&a.forEach(f=>{c.push(`assignee:${f}`)}),i&&c.push(`updated:<${i}`),n&&u!=null&&u!=null&&c.push(`draft:${String(u)}`),l&&c.push(`author:${l}`),g&&c.push(`review-requested:${g}`),d&&c.push(`mentions:${d}`);let b=`
|
|
104
104
|
query (
|
|
105
105
|
$after: String
|
|
106
106
|
$search: String!
|
|
@@ -113,7 +113,7 @@ query (
|
|
|
113
113
|
) {
|
|
114
114
|
nodes {
|
|
115
115
|
... on PullRequest {
|
|
116
|
-
${
|
|
116
|
+
${Ke(n,s)}
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
pageInfo {
|
|
@@ -123,7 +123,7 @@ query (
|
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
`;return
|
|
126
|
+
`;return I(e,{query:`${b}`,variables:{after:o??null,search:`sort:updated type:pr state:open ${c.join(" ")}`}},r)};var le=`
|
|
127
127
|
id
|
|
128
128
|
databaseId
|
|
129
129
|
owner {
|
|
@@ -136,13 +136,13 @@ defaultBranchRef {
|
|
|
136
136
|
name
|
|
137
137
|
}
|
|
138
138
|
viewerPermission
|
|
139
|
-
`,
|
|
139
|
+
`,de={id:"U_kgDNJ5k",databaseId:10137,name:"Deleted user",login:"ghost",email:"",avatarUrl:"https://avatars.githubusercontent.com/u/10137?v=4"},et={APPROVED:"APPROVED",CHANGES_REQUESTED:"CHANGES_REQUESTED",COMMENTED:"COMMENTED",REVIEW_REQUESTED:"REVIEW_REQUESTED"},tt={MERGEABLE:"MERGEABLE",CONFLICTING:"CONFLICTS",UNKNOWN:"UNKNOWN"},pe=e=>({id:e.databaseId.toString(),graphQLId:e.id,namespace:e.owner.login,name:e.name,webUrl:e.url,httpsUrl:e.url.endsWith(".git")?e.url:`${e.url}.git`,sshUrl:e.sshUrl,defaultBranch:e.defaultBranchRef,permission:e.viewerPermission}),rt={OPEN:"OPEN",CLOSED:"CLOSED",MERGED:"MERGED"},$=e=>({id:e.databaseId.toString(),graphQLId:e.id,name:e.name,username:e.login,email:e.email??null,avatarUrl:e.avatarUrl}),st=e=>{var l,p,g,m,d,c,b,f;let t=e.author?e.author.id?e.author:null:de,r=(p=(l=e.commits.nodes)==null?void 0:l[0])==null?void 0:p.commit,n=((g=e.headRef)==null?void 0:g.target)||r,s=n==null?void 0:n.oid,o=r==null?void 0:r.oid,a=s===o?(d=(m=r==null?void 0:r.status)==null?void 0:m.contexts)==null?void 0:d[0]:null,i=(((c=e.reviewRequests)==null?void 0:c.nodes)||[]).filter(h=>!h.asCodeOwner),u=(b=e.headRepository)==null?void 0:b.url;return u&&!u.endsWith(".git")&&(u=`${u}.git`),{id:e.databaseId.toString(),graphQLId:e.id,title:e.title,number:e.number,state:rt[e.state],commentCount:e.comments.totalCount,upvoteCount:e.reactions.totalCount,author:t?$(t):null,createdDate:new Date(e.createdAt),isDraft:e.isDraft,repository:{name:e.repository.name,owner:{login:e.repository.owner.login}},headRepository:e.headRepository?{name:e.headRepository.name,owner:{login:e.headRepository.owner.login},remoteInfo:{cloneUrlHTTPS:u,cloneUrlSSH:e.headRepository.sshUrl}}:null,headCommit:{buildStatus:a||null},headRef:e.headRef?{name:e.headRef.name}:null,baseRef:e.baseRef?{name:e.baseRef.name}:null,url:e.url,updatedDate:new Date(e.updatedAt),closedDate:e.closedAt?new Date(e.closedAt):null,assignees:e.assignees.nodes?e.assignees.nodes.map($):null,reviews:i.map(h=>({reviewer:$(h.requestedReviewer),state:"REVIEW_REQUESTED"})).concat((((f=e.latestReviews)==null?void 0:f.nodes)||[]).map(h=>{let R=h.author||de;return{reviewer:$(R),state:et[h.state]}})),additions:e.additions,deletions:e.deletions,fileCount:e.changedFiles,commitCount:e.commits.totalCount,mergeableState:tt[e.mergeable]}},nt=e=>{var r;let t=(r=e.author)!=null&&r.id?e.author:de;return{id:e.databaseId.toString(),graphQLId:e.id,number:e.number,title:e.title,author:$(t),commentCount:e.comments.totalCount,createdDate:new Date(e.createdAt),description:null,state:null,repository:{name:e.repository.name,owner:{login:e.repository.owner.login}},url:e.url,updatedDate:new Date(e.updatedAt),assignees:e.assignees.nodes?e.assignees.nodes.map($):[],upvoteCount:e.reactions.totalCount}},F=class extends L{constructor(){super(...arguments);this._scopesCache={}}async getScopes(r){let n=r.token||this.config.token;if(!n)return[];let s=this._scopesCache[n];if(!s){let a=(await I(this.config,{query:"query { rateLimit(dryRun: true) { __typename } }"},r)).headers["x-oauth-scopes"];s=a?a.split(", "):[],this._scopesCache[n]=s}return s}getEnterpriseAvatarUrlIfNeeded(r,n,s){let o=s.baseUrl||this.config.baseUrl;return!o||o.startsWith(ae)?r:n?`https://avatars.githubusercontent.com/u/e?email=${encodeURIComponent(n)}`:""}async getCurrentUser(r={}){var a;let n=await this.getScopes(r),o=(a=(await I(this.config,{query:`
|
|
140
140
|
query getCurrentUser {
|
|
141
141
|
viewer {
|
|
142
|
-
${
|
|
142
|
+
${E(!1,O(n))}
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
|
-
`},r)).body.data)==null?void 0:a.viewer;if(!o)throw new Error("Current user not found.");return{data:$(o)}}async getUserForCommit(r,n={}){var i,u;let o=(i=(await
|
|
145
|
+
`},r)).body.data)==null?void 0:a.viewer;if(!o)throw new Error("Current user not found.");return{data:$(o)}}async getUserForCommit(r,n={}){var i,u;let o=(i=(await I(this.config,{query:`
|
|
146
146
|
query getUserForCommit(
|
|
147
147
|
$owner: String!
|
|
148
148
|
$name: String!
|
|
@@ -161,38 +161,71 @@ query getUserForCommit(
|
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
|
-
`,variables:{owner:r.repo.namespace,name:r.repo.name,oid:r.oid,avatarSize:r.avatarSize}},n)).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,n)}}}async getAccountForEmail(r,n={}){var i,u,l;let s=await this.getScopes(n),a=(l=(u=(i=(await
|
|
164
|
+
`,variables:{owner:r.repo.namespace,name:r.repo.name,oid:r.oid,avatarSize:r.avatarSize}},n)).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,n)}}}async getAccountForEmail(r,n={}){var i,u,l;let s=await this.getScopes(n),a=(l=(u=(i=(await I(this.config,{query:`
|
|
165
165
|
query getAccountForEmail($query: String! $avatarSize: Int) {
|
|
166
166
|
search(query: $query, type: USER, first: 1) {
|
|
167
167
|
nodes {
|
|
168
168
|
... on User {
|
|
169
|
-
${
|
|
169
|
+
${E(!0,O(s))}
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
|
-
`,variables:{query:`in:email ${r.email}`,avatarSize:r.avatarSize}},n)).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,n)})}}async getAccountForUsername(r,n={}){var i;let s=await this.getScopes(n),a=(i=(await
|
|
174
|
+
`,variables:{query:`in:email ${r.email}`,avatarSize:r.avatarSize}},n)).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,n)})}}async getAccountForUsername(r,n={}){var i;let s=await this.getScopes(n),a=(i=(await I(this.config,{query:`
|
|
175
175
|
query getUserForUsername($login: String! $avatarSize: Int) {
|
|
176
176
|
user(login: $login) {
|
|
177
|
-
${
|
|
177
|
+
${E(!0,O(s))}
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
|
-
`,variables:{login:r.username,avatarSize:r.avatarSize}},n)).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,n)})}}async
|
|
180
|
+
`,variables:{login:r.username,avatarSize:r.avatarSize}},n)).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,n)})}}async getOrgsForCurrentUser(r={},n={}){var a,i;let s=await I(this.config,{query:`
|
|
181
|
+
query getOrgsForCurrentUser($cursor: String, $first: Int!) {
|
|
182
|
+
viewer {
|
|
183
|
+
organizations(first: $first after: $cursor) {
|
|
184
|
+
pageInfo {
|
|
185
|
+
endCursor
|
|
186
|
+
hasNextPage
|
|
187
|
+
}
|
|
188
|
+
nodes {
|
|
189
|
+
id
|
|
190
|
+
databaseId
|
|
191
|
+
name
|
|
192
|
+
login
|
|
193
|
+
email
|
|
194
|
+
avatarUrl
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
`,variables:{cursor:r.cursor,first:C}},n);if(!((a=s.body.data)!=null&&a.viewer.organizations))throw new Error(((i=s.body.errors)==null?void 0:i[0].message)||s.statusText||"Unknown error");let o=s.body.data.viewer.organizations.nodes||[];return{pageInfo:s.body.data.viewer.organizations.pageInfo,data:o.map(u=>({id:u.databaseId.toString(),graphQLId:u.id,username:u.login,name:u.name||null,email:u.email||null,avatarUrl:u.avatarUrl}))}}async getRepo(r,n={}){var o;let s=await I(this.config,{query:`
|
|
181
200
|
query getRepo($owner: String!, $name: String!) {
|
|
182
201
|
repository(owner: $owner, name: $name) {
|
|
183
|
-
${
|
|
202
|
+
${le}
|
|
184
203
|
}
|
|
185
204
|
}
|
|
186
|
-
`,variables:{owner:r.namespace,name:r.name}},n);if(!((o=s.body.data)!=null&&o.repository))throw new Error(`Repository ${r.namespace}/${r.name} not found`);return{data:
|
|
205
|
+
`,variables:{owner:r.namespace,name:r.name}},n);if(!((o=s.body.data)!=null&&o.repository))throw new Error(`Repository ${r.namespace}/${r.name} not found`);return{data:pe(s.body.data.repository)}}async getRepos(r,n={}){let s=r.map(({namespace:a,name:i},u)=>`
|
|
187
206
|
getRepo_${u}: repository(owner: "${a}", name: "${i}") {
|
|
188
|
-
${
|
|
207
|
+
${le}
|
|
189
208
|
}
|
|
190
209
|
`).join(`
|
|
191
|
-
`),o=await
|
|
210
|
+
`),o=await I(this.config,{query:`
|
|
192
211
|
query batchGetRepos {
|
|
193
212
|
${s}
|
|
194
213
|
}
|
|
195
|
-
`},n);if(!o.body.data)throw new Error(o.statusText||"Unknown error");return{data:r.map(({namespace:a,name:i},u)=>{let l=o.body.data[`getRepo_${u}`];if(!l)throw new Error(`Repository ${a}/${i} not found`);return
|
|
214
|
+
`},n);if(!o.body.data)throw new Error(o.statusText||"Unknown error");return{data:r.map(({namespace:a,name:i},u)=>{let l=o.body.data[`getRepo_${u}`];if(!l)throw new Error(`Repository ${a}/${i} not found`);return pe(l)})}}async getReposForUsernames(r,n={}){var a;if(!r.usernames.length)return{pageInfo:{endCursor:null,hasNextPage:!1},data:[]};let s=await I(this.config,{query:`
|
|
215
|
+
query getReposForUsernames($query: String!, $cursor: String, $first: Int!) {
|
|
216
|
+
search(query: $query, type: REPOSITORY, first: $first, after: $cursor) {
|
|
217
|
+
pageInfo {
|
|
218
|
+
endCursor
|
|
219
|
+
hasNextPage
|
|
220
|
+
}
|
|
221
|
+
nodes {
|
|
222
|
+
... on Repository {
|
|
223
|
+
${le}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
`,variables:{query:`fork:true ${r.usernames.map(i=>`user:${i}`).join(" ")}`,cursor:r.cursor,first:C}},n);if(!s.body.data)throw new Error(((a=s.body.errors)==null?void 0:a[0].message)||s.statusText||"Unknown error");let o=s.body.data.search.nodes||[];return{pageInfo:s.body.data.search.pageInfo,data:o.map(pe)}}async getReposForOwners(r,n={}){return this.getReposForUsernames({usernames:r.owners.filter(s=>s.username).map(s=>s.username),cursor:r.cursor},n)}async getRefs(r,n,s={}){var u;let a=(u=(await I(this.config,{query:`
|
|
196
229
|
query getRefs($owner: String!, $name: String!, $refPrefix: String!, $cursor: String, $first: Int!) {
|
|
197
230
|
repository(owner: $owner, name: $name) {
|
|
198
231
|
refs(refPrefix: $refPrefix first: $first after: $cursor) {
|
|
@@ -213,7 +246,7 @@ query getRefs($owner: String!, $name: String!, $refPrefix: String!, $cursor: Str
|
|
|
213
246
|
}
|
|
214
247
|
}
|
|
215
248
|
}
|
|
216
|
-
`,variables:{owner:n.repo.namespace,name:n.repo.name,refPrefix:r,cursor:n.cursor,first:
|
|
249
|
+
`,variables:{owner:n.repo.namespace,name:n.repo.name,refPrefix:r,cursor:n.cursor,first:C}},s)).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 g;let p=(g=l.target)!=null&&g.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(r,n={}){return this.getRefs("refs/heads/",r,n)}async getTags(r,n={}){return this.getRefs("refs/tags/",r,n)}async getBlame(r,n={}){var i;let o=(i=(await I(this.config,{query:`
|
|
217
250
|
query getBlame($owner: String!, $name: String!, $ref: String!, $path: String!) {
|
|
218
251
|
repository(owner: $owner, name: $name) {
|
|
219
252
|
object(expression: $ref) {
|
|
@@ -252,7 +285,7 @@ query getBlame($owner: String!, $name: String!, $ref: String!, $path: String!) {
|
|
|
252
285
|
}
|
|
253
286
|
}
|
|
254
287
|
}
|
|
255
|
-
`,variables:{owner:r.repo.namespace,name:r.repo.name,ref:r.ref,path:r.path}},n)).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 getPullRequestsForRepos(r,n={}){var l,p,m,
|
|
288
|
+
`,variables:{owner:r.repo.namespace,name:r.repo.name,ref:r.ref,path:r.path}},n)).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 getPullRequestsForRepos(r,n={}){var l,p,g,m,d,c,b,f;let s=await this.getScopes(n),o=O(s),a="Field 'isDraft' doesn't exist on type 'PullRequest'",i=await ue(this.config,r,n,!0,o);if(i.body.errors){let R=((p=(l=i==null?void 0:i.body.errors)==null?void 0:l[0])==null?void 0:p.message)===a;n.baseUrl&&R&&(i=await ue(this.config,r,n,!1,o))}let u=((d=(m=(g=i.body)==null?void 0:g.data)==null?void 0:m.search)==null?void 0:d.nodes)||[];return{pageInfo:(f=(b=(c=i.body)==null?void 0:c.data)==null?void 0:b.search)==null?void 0:f.pageInfo,data:u.map(st)}}async getIssuesForRepos(r,n={}){var b,f,h,R,P,S;let s=await this.getScopes(n),o=O(s),a=ie(r.startQuery||""),{cursor:i,assigneeLogins:u,updatedBefore:l,authorLogin:p,mentionLogin:g}=r||{};r.repos.forEach(D=>{a.push(`repo:${D.namespace}/${D.name}`)}),u&&u.forEach(D=>{a.push(`assignee:${D}`)}),l&&a.push(`updated:<${l}`),p&&a.push(`author:${p}`),g&&a.push(`mentions:${g}`);let m=`
|
|
256
289
|
query (
|
|
257
290
|
$after: String
|
|
258
291
|
$search: String!
|
|
@@ -270,7 +303,7 @@ query (
|
|
|
270
303
|
title
|
|
271
304
|
author {
|
|
272
305
|
... on User {
|
|
273
|
-
${
|
|
306
|
+
${E(!1,o)}
|
|
274
307
|
}
|
|
275
308
|
}
|
|
276
309
|
createdAt
|
|
@@ -291,7 +324,7 @@ query (
|
|
|
291
324
|
}
|
|
292
325
|
assignees(first: 100) {
|
|
293
326
|
nodes {
|
|
294
|
-
${
|
|
327
|
+
${E(!1,o)}
|
|
295
328
|
}
|
|
296
329
|
}
|
|
297
330
|
}
|
|
@@ -303,7 +336,7 @@ query (
|
|
|
303
336
|
}
|
|
304
337
|
}
|
|
305
338
|
}
|
|
306
|
-
`,d=await
|
|
339
|
+
`,d=await I(this.config,{query:`${m}`,variables:{after:i??null,search:`sort:updated type:issue state:open ${a.join(" ")}`}},n);if(!d.body.data)throw new Error(d.statusText||"Unknown error");let c=((h=(f=(b=d.body)==null?void 0:b.data)==null?void 0:f.search)==null?void 0:h.nodes)||[];return{pageInfo:(S=(P=(R=d.body)==null?void 0:R.data)==null?void 0:P.search)==null?void 0:S.pageInfo,data:c.map(nt)}}};var ot="https://gitlab.com/api/v4",at="https://gitlab.com/api/graphql",$e=/\/api\/v\d+$/,Ge=e=>{if(e.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.")},ge=(e,t)=>{let r=t.baseUrl||e.baseUrl;return r?(r=r.replace(/\/$/,""),Ge(r),r):ot},it=(e,t)=>{let r=t.baseUrl||e.baseUrl;return r?(r=r.replace(/\/$/,""),Ge(r),$e.test(r)&&(r=r.replace($e,"")),`${r}/api/graphql`):at},v=(e,t,r)=>{let n=y(r.token||e.token);return e.request({url:it(e,r),method:"POST",headers:{...n,"Content-Type":"application/json"},body:JSON.stringify(t)})};var ut={CAN_BE_MERGED:"MERGEABLE",CANNOT_BE_MERGED:"CONFLICTS",CANNOT_BE_MERGED_RECHECK:"UNKNOWN",UNCHECKED:"UNKNOWN",CHECKING:"UNKNOWN"},Re="gid://gitlab/User/",Q="gid://gitlab/Project/",lt="gid://gitlab/MergeRequest/",pt="gid://gitlab/Issue/",me=`
|
|
307
340
|
id
|
|
308
341
|
path
|
|
309
342
|
fullPath
|
|
@@ -313,19 +346,19 @@ sshUrlToRepo
|
|
|
313
346
|
repository {
|
|
314
347
|
rootRef
|
|
315
348
|
}
|
|
316
|
-
`,
|
|
349
|
+
`,x=`
|
|
317
350
|
id
|
|
318
351
|
name
|
|
319
352
|
username
|
|
320
353
|
publicEmail
|
|
321
354
|
avatarUrl
|
|
322
|
-
`,
|
|
355
|
+
`,ce=`
|
|
323
356
|
author {
|
|
324
|
-
${
|
|
357
|
+
${x}
|
|
325
358
|
}
|
|
326
359
|
assignees {
|
|
327
360
|
nodes {
|
|
328
|
-
${
|
|
361
|
+
${x}
|
|
329
362
|
}
|
|
330
363
|
}
|
|
331
364
|
createdAt
|
|
@@ -339,11 +372,11 @@ updatedAt
|
|
|
339
372
|
upvotes
|
|
340
373
|
userNotesCount
|
|
341
374
|
webUrl
|
|
342
|
-
|
|
375
|
+
`,Le=`
|
|
343
376
|
id
|
|
344
377
|
state
|
|
345
378
|
author {
|
|
346
|
-
${
|
|
379
|
+
${x}
|
|
347
380
|
}
|
|
348
381
|
diffStatsSummary {
|
|
349
382
|
additions
|
|
@@ -364,25 +397,25 @@ targetBranch
|
|
|
364
397
|
sourceBranch
|
|
365
398
|
assignees {
|
|
366
399
|
nodes {
|
|
367
|
-
${
|
|
400
|
+
${x}
|
|
368
401
|
}
|
|
369
402
|
}
|
|
370
403
|
reviewers {
|
|
371
404
|
nodes {
|
|
372
|
-
${
|
|
405
|
+
${x}
|
|
373
406
|
mergeRequestInteraction {
|
|
374
407
|
approved
|
|
375
408
|
reviewState
|
|
376
409
|
}
|
|
377
410
|
}
|
|
378
411
|
}
|
|
379
|
-
mergeStatusEnum`,_=e=>`${e.namespace}/${e.name}`,
|
|
412
|
+
mergeStatusEnum`,_=e=>`${e.namespace}/${e.name}`,dt=e=>`${e.namespace}/${e.name}`,he=e=>{var t;return{id:e.id.replace(Q,""),graphQLId:e.id,namespace:e.fullPath.split("/").slice(0,-1).join("/"),name:e.path,webUrl:e.webUrl,httpsUrl:e.httpUrlToRepo,sshUrl:e.sshUrlToRepo,defaultBranch:(t=e.repository)!=null&&t.rootRef?{name:e.repository.rootRef}:null,permission:null}},gt={opened:"OPEN",merged:"MERGED",closed:"CLOSED"},k=e=>({id:e.id.replace(Re,""),graphQLId:e.id,name:e.name,username:e.username,email:e.publicEmail,avatarUrl:e.avatarUrl}),Ae=(e,t)=>{var r,n,s,o,a;return{id:e.id.replace(lt,""),graphQLId:e.id,title:e.title,number:parseInt(e.iid,10),state:gt[e.state],commentCount:e.userNotesCount||0,upvoteCount:e.upvotes,author:e.author?k(e.author):null,createdDate:new Date(e.createdAt),isDraft:e.draft,repository:{name:t.name,owner:{login:t.owner}},headRepository:null,headCommit:{buildStatus:null},baseRef:{name:e.targetBranch},headRef:{name:e.sourceBranch},url:e.webUrl,updatedDate:new Date(e.updatedAt),closedDate:e.mergedAt?new Date(e.mergedAt):null,assignees:(r=e.assignees)!=null&&r.nodes?e.assignees.nodes.map(k):null,reviews:(n=e.reviewers)!=null&&n.nodes?e.reviewers.nodes.map(i=>{var u,l;return{reviewer:k(i),state:(u=i.mergeRequestInteraction)!=null&&u.approved?"APPROVED":((l=i.mergeRequestInteraction)==null?void 0:l.reviewState)==="REVIEWED"?"CHANGES_REQUESTED":"CHANGES_REQUESTED"}}):null,additions:((s=e.diffStatsSummary)==null?void 0:s.additions)||0,deletions:((o=e.diffStatsSummary)==null?void 0:o.deletions)||0,fileCount:((a=e.diffStatsSummary)==null?void 0:a.fileCount)||0,commitCount:e.commitCount||0,mergeableState:ut[e.mergeStatusEnum]}},fe=(e,t)=>({author:{avatarUrl:e.author.avatarUrl,email:null,graphQLId:e.author.id,id:e.author.id.replace(Re,""),name:e.author.name,username:e.author.username},assignees:e.assignees.nodes.map(r=>({avatarUrl:r.avatarUrl,email:null,graphQLId:r.id,id:r.id.replace(Re,""),name:r.name,username:r.username})),commentCount:e.userNotesCount,createdDate:new Date(e.createdAt),description:e.description,graphQLId:e.id,id:e.id.replace(pt,""),number:e.iid,repository:{name:t.name,owner:{login:t.owner}},updatedDate:new Date(e.updatedAt),upvoteCount:e.upvotes,state:e.state,title:e.title,url:e.webUrl}),z=class extends L{async getCurrentUser(t={}){var s;let n=(s=(await v(this.config,{query:`
|
|
380
413
|
query getCurrentUser {
|
|
381
414
|
currentUser {
|
|
382
|
-
${
|
|
415
|
+
${x}
|
|
383
416
|
}
|
|
384
417
|
}
|
|
385
|
-
`},t)).body.data)==null?void 0:s.currentUser;if(!n)throw new Error("Current user not found.");return{data:
|
|
418
|
+
`},t)).body.data)==null?void 0:s.currentUser;if(!n)throw new Error("Current user not found.");return{data:k(n)}}async getUserForCommit(t,r={}){var a,i,u,l;let n=_(t.repo),o=(l=(u=(i=(a=(await v(this.config,{query:`
|
|
386
419
|
query getUserForCommit($fullPath: ID!, $oid: String!) {
|
|
387
420
|
project(fullPath: $fullPath) {
|
|
388
421
|
repository {
|
|
@@ -400,32 +433,44 @@ query getUserForCommit($fullPath: ID!, $oid: String!) {
|
|
|
400
433
|
query getAccountForEmail($email: String!) {
|
|
401
434
|
users(search: $email) {
|
|
402
435
|
nodes {
|
|
403
|
-
${
|
|
436
|
+
${x}
|
|
404
437
|
}
|
|
405
438
|
}
|
|
406
439
|
}
|
|
407
|
-
`,variables:{email:t.email}},r)).body.data)==null?void 0:o.users)==null?void 0:a.nodes)==null?void 0:i[0];if(!s)throw new Error("User not found.");return{data:
|
|
440
|
+
`,variables:{email:t.email}},r)).body.data)==null?void 0:o.users)==null?void 0:a.nodes)==null?void 0:i[0];if(!s)throw new Error("User not found.");return{data:k(s)}}async getAccountForUsername(t,r={}){var o;let s=(o=(await v(this.config,{query:`
|
|
408
441
|
query getAccountForUsername($username: String!) {
|
|
409
442
|
user(username: $username) {
|
|
410
|
-
${
|
|
443
|
+
${x}
|
|
411
444
|
}
|
|
412
445
|
}
|
|
413
|
-
`,variables:{username:t.username}},r)).body.data)==null?void 0:o.user;if(!s)throw new Error("User not found.");return{data:
|
|
446
|
+
`,variables:{username:t.username}},r)).body.data)==null?void 0:o.user;if(!s)throw new Error("User not found.");return{data:k(s)}}async getRepo(t,r={}){var o;let n=_(t),s=await v(this.config,{query:`
|
|
414
447
|
query getRepo($fullPath: ID!) {
|
|
415
448
|
project(fullPath: $fullPath) {
|
|
416
|
-
${
|
|
449
|
+
${me}
|
|
417
450
|
}
|
|
418
451
|
}
|
|
419
|
-
`,variables:{fullPath:n}},r);if(!((o=s.body.data)!=null&&o.project))throw new Error(`Repository ${n} not found`);return{data:
|
|
452
|
+
`,variables:{fullPath:n}},r);if(!((o=s.body.data)!=null&&o.project))throw new Error(`Repository ${n} not found`);return{data:he(s.body.data.project)}}async getRepos(t,r={}){let n=t.map(_),s=n.map((a,i)=>`
|
|
420
453
|
getRepo_${i}: project(fullPath: "${a}") {
|
|
421
|
-
${
|
|
454
|
+
${me}
|
|
422
455
|
}
|
|
423
456
|
`).join(`
|
|
424
457
|
`),o=await v(this.config,{query:`
|
|
425
458
|
query batchGetRepos {
|
|
426
459
|
${s}
|
|
427
460
|
}
|
|
428
|
-
`},r);if(!o.body.data)throw new Error(o.statusText||"Unknown error");return{data:n.map((a,i)=>{let u=o.body.data[`getRepo_${i}`];if(!u)throw new Error(`Repository ${a} not found`);return
|
|
461
|
+
`},r);if(!o.body.data)throw new Error(o.statusText||"Unknown error");return{data:n.map((a,i)=>{let u=o.body.data[`getRepo_${i}`];if(!u)throw new Error(`Repository ${a} not found`);return he(u)})}}async getReposForCurrentUser(t={},r={}){var o,a,i,u,l,p;let n=await v(this.config,{query:`
|
|
462
|
+
query getReposForCurrentUser($after: String) {
|
|
463
|
+
projects(membership: true first: 100 after: $after) {
|
|
464
|
+
pageInfo {
|
|
465
|
+
endCursor
|
|
466
|
+
hasNextPage
|
|
467
|
+
}
|
|
468
|
+
nodes {
|
|
469
|
+
${me}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
`,variables:{after:t.cursor}},r);if(!((o=n.body.data)!=null&&o.projects))throw new Error(((a=n.body.errors)==null?void 0:a[0].message)||n.statusText||"Unknown error");let s=((u=(i=n.body.data)==null?void 0:i.projects)==null?void 0:u.nodes)||[];return{pageInfo:(p=(l=n.body.data)==null?void 0:l.projects)==null?void 0:p.pageInfo,data:s.map(he)}}async getRefs(t,r,n={}){var u;let s=_(r.repo),o=new URL(`${ge(this.config,n)}/projects/${encodeURIComponent(s)}/repository/${t}`);o.searchParams.set("page",((u=r.page)==null?void 0:u.toString())||"1"),o.searchParams.set("per_page",C.toString());let a=await this.config.request({url:o.toString(),headers:y(n.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(t,r={}){return this.getRefs("branches",t,r)}async getTags(t,r={}){return this.getRefs("tags",t,r)}async getBlame(t,r={}){let n=_(t.repo),s=new URL(`${ge(this.config,r)}/projects/${encodeURIComponent(n)}/repository/files/${encodeURIComponent(t.path)}/blame`);s.searchParams.set("ref",t.ref);let o=await this.config.request({url:s.toString(),headers:y(r.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}}})}}}getVariablesForPullRequests(t){let{updatedBefore:r,isDraft:n,authorLogin:s,assigneeLogins:o,reviewRequestedLogin:a}=t||{},i={},u=[],l=[],p=(g,m,d)=>{u.push(`$${g}: ${d}`),l.push(`${g}: $${g}`),i[g]=m};return r&&p("updatedBefore",r,"Time"),s&&p("authorUsername",s,"String"),o&&p("assigneeUsername",o[0],"String"),n!=null&&p("draft",n,"Boolean"),a&&p("reviewerUsername",a,"String"),{variables:i,variableTypes:u,mergeRequestArguments:l}}async getPullRequestsForRepo(t,r={}){var b,f,h;let{cursor:n,repo:s}=t||{},o=_(s),{variables:a,variableTypes:i,mergeRequestArguments:u}=this.getVariablesForPullRequests(t),l={fullPath:o,...a},p=await v(this.config,{query:`
|
|
429
474
|
query getPullRequestsForRepo(
|
|
430
475
|
$fullPath: ID!
|
|
431
476
|
$after: String
|
|
@@ -448,12 +493,12 @@ query getPullRequestsForRepo(
|
|
|
448
493
|
hasNextPage
|
|
449
494
|
}
|
|
450
495
|
nodes {
|
|
451
|
-
${
|
|
496
|
+
${Le}
|
|
452
497
|
}
|
|
453
498
|
}
|
|
454
499
|
}
|
|
455
500
|
}
|
|
456
|
-
`,variables:{...l,after:n}},r),
|
|
501
|
+
`,variables:{...l,after:n}},r),g=[],m=(b=p.body.data)==null?void 0:b.project,d={name:(m==null?void 0:m.name)||"",owner:((m==null?void 0:m.fullPath)||"").split("/").slice(0,-1).join("/")};return(((f=m==null?void 0:m.mergeRequests)==null?void 0:f.nodes)||[]).forEach(R=>{g.push(Ae(R,d))}),{pageInfo:(h=m==null?void 0:m.mergeRequests)==null?void 0:h.pageInfo,data:g}}async getPullRequestsForRepos(t,r={}){var m,d,c,b,f;let{cursor:n}=t||{},s=t.repoIds.map(h=>h.toString().startsWith(Q)?h:`${Q}${h}`),{variables:o,variableTypes:a,mergeRequestArguments:i}=this.getVariablesForPullRequests(t),u={projectIds:s,...o},l=await v(this.config,{query:`
|
|
457
502
|
query getPullRequests(
|
|
458
503
|
$projectIds: [ID!]
|
|
459
504
|
$after: String
|
|
@@ -477,23 +522,23 @@ query getPullRequests(
|
|
|
477
522
|
${i.length?i.join(" "):""}
|
|
478
523
|
) {
|
|
479
524
|
nodes {
|
|
480
|
-
${
|
|
525
|
+
${Le}
|
|
481
526
|
}
|
|
482
527
|
}
|
|
483
528
|
}
|
|
484
529
|
}
|
|
485
530
|
}
|
|
486
|
-
`,variables:{...u,after:n}},r),p=[];return(((d=(
|
|
531
|
+
`,variables:{...u,after:n}},r),p=[];return(((d=(m=l.body.data)==null?void 0:m.projects)==null?void 0:d.nodes)||[]).forEach(h=>{var S;let R={name:h.name,owner:h.fullPath.split("/").slice(0,-1).join("/")};(((S=h.mergeRequests)==null?void 0:S.nodes)||[]).forEach(D=>{p.push(Ae(D,R))})}),{pageInfo:(f=(b=(c=l.body)==null?void 0:c.data)==null?void 0:b.projects)==null?void 0:f.pageInfo,data:p}}async getIssue(t,r={}){var o,a,i,u,l,p,g;let n=dt(t),s=await v(this.config,{query:`
|
|
487
532
|
query GetSingleIssue($projectId: ID!, $issueId: String!) {
|
|
488
533
|
project(fullPath: $projectId) {
|
|
489
534
|
name
|
|
490
535
|
fullPath
|
|
491
536
|
issue(iid: $issueId) {
|
|
492
|
-
${
|
|
537
|
+
${ce}
|
|
493
538
|
}
|
|
494
539
|
}
|
|
495
540
|
}
|
|
496
|
-
`,variables:{issueId:t.id,projectId:n}},r);if(!((o=s.body.data)!=null&&o.project))throw new Error(`Repository ${n} not found`);if(!((i=(a=s.body.data)==null?void 0:a.project)!=null&&i.issue))throw new Error(`Issue ${t.id} not found`);return{data:
|
|
541
|
+
`,variables:{issueId:t.id,projectId:n}},r);if(!((o=s.body.data)!=null&&o.project))throw new Error(`Repository ${n} not found`);if(!((i=(a=s.body.data)==null?void 0:a.project)!=null&&i.issue))throw new Error(`Issue ${t.id} not found`);return{data:fe((l=(u=s.body.data)==null?void 0:u.project)==null?void 0:l.issue,{name:(p=s.body.data)==null?void 0:p.project.name,owner:(g=s.body.data)==null?void 0:g.project.fullPath.split("/").slice(0,-1).join("/")})}}getVariablesForIssues(t){let{updatedBefore:r,authorLogin:n,assigneeLogins:s}=t||{},o={},a=[],i=[],u=(l,p,g)=>{a.push(`$${l}: ${g}`),i.push(`${l}: $${l}`),o[l]=p};return r&&u("updatedBefore",r,"Time"),n&&u("authorUsername",n,"String"),s&&u("assigneeUsername",s[0],"String"),{variables:o,variableTypes:a,issueArguments:i}}async getIssuesForRepo(t,r={}){var f,h,R;let{cursor:n,repo:s}=t||{},o=_(s),{variables:a,variableTypes:i,issueArguments:u}=this.getVariablesForIssues(t),l={fullPath:o,...a},p=`
|
|
497
542
|
query GetIssuesFromProject(
|
|
498
543
|
$fullPath: ID!
|
|
499
544
|
$after: String
|
|
@@ -512,7 +557,7 @@ query GetSingleIssue($projectId: ID!, $issueId: String!) {
|
|
|
512
557
|
${u.length?u.join(" "):""}
|
|
513
558
|
) {
|
|
514
559
|
nodes {
|
|
515
|
-
${
|
|
560
|
+
${ce}
|
|
516
561
|
}
|
|
517
562
|
pageInfo {
|
|
518
563
|
endCursor
|
|
@@ -520,7 +565,7 @@ query GetSingleIssue($projectId: ID!, $issueId: String!) {
|
|
|
520
565
|
}
|
|
521
566
|
}
|
|
522
567
|
}
|
|
523
|
-
}`,
|
|
568
|
+
}`,g=await v(this.config,{query:p,variables:{...l,after:n}},r),m=[],d=(f=g.body.data)==null?void 0:f.project,c={name:(d==null?void 0:d.name)||"",owner:((d==null?void 0:d.fullPath)||"").split("/").slice(0,-1).join("/")};return(((h=d==null?void 0:d.issues)==null?void 0:h.nodes)||[]).forEach(P=>{m.push(fe(P,c))}),{pageInfo:(R=d==null?void 0:d.issues)==null?void 0:R.pageInfo,data:m.sort((P,S)=>(P.updatedDate||P.createdDate).getTime()-(S.updatedDate||S.createdDate).getTime())}}async getIssuesForRepos(t,r={}){var d,c,b,f,h;let{cursor:n}=t||{},s=t.repoIds.map(R=>R.toString().startsWith(Q)?R:`${Q}${R}`),{variables:o,variableTypes:a,mergeRequestArguments:i}=this.getVariablesForPullRequests(t),u={projectIds:s,...o},l=`
|
|
524
569
|
query GetIssuesFromProject(
|
|
525
570
|
$projectIds: [ID!]
|
|
526
571
|
$after: String
|
|
@@ -544,9 +589,9 @@ query GetSingleIssue($projectId: ID!, $issueId: String!) {
|
|
|
544
589
|
${i.length?i.join(" "):""}
|
|
545
590
|
) {
|
|
546
591
|
nodes {
|
|
547
|
-
${
|
|
592
|
+
${ce}
|
|
548
593
|
}
|
|
549
594
|
}
|
|
550
595
|
}
|
|
551
596
|
}
|
|
552
|
-
}`,p=await v(this.config,{query:l,variables:{...u,after:n}},r),
|
|
597
|
+
}`,p=await v(this.config,{query:l,variables:{...u,after:n}},r),g=[];return(((c=(d=p.body.data)==null?void 0:d.projects)==null?void 0:c.nodes)||[]).forEach(R=>{var D;let P={name:R.name,owner:R.fullPath.split("/").slice(0,-1).join("/")};(((D=R.issues)==null?void 0:D.nodes)||[]).forEach(Te=>g.push(fe(Te,P)))}),{pageInfo:(h=(f=(b=p.body)==null?void 0:b.data)==null?void 0:f.projects)==null?void 0:h.pageInfo,data:g.sort((R,P)=>(R.updatedDate||R.createdDate).getTime()-(P.updatedDate||P.createdDate).getTime())}}};var mt="https://api.atlassian.com/ex/jira",ct=100,ht=e=>{var r;let t=e.fields.assignee;return{id:e.id,commentCount:e.fields.comment.comments.length,number:e.key,title:e.fields.summary,url:e.self,createdDate:new Date(e.fields.created),author:{id:e.fields.creator.accountId,name:e.fields.creator.displayName,email:e.fields.creator.emailAddress,avatarUrl:e.fields.creator.avatarUrls["32x32"],username:e.fields.creator.displayName},updatedDate:new Date(e.fields.updated),assignees:t?[{id:t.accountId,name:t.displayName,email:t.emailAddress,avatarUrl:t.avatarUrls["32x32"],username:t.displayName}]:[],description:null,repository:null,state:null,upvoteCount:((r=e.fields.votes)==null?void 0:r.votes)||0}},M=class extends w{async getIssuesForProject(t,r={}){let{assigneeLogins:n,authorLogin:s,mentionLogin:o,project:a}=t||{},i=[`project = "${a}"`];return s&&i.push(`creator in (${s})`),n&&i.push(`assignee in (${n.join(", ")})`),o&&i.push(`comment ~ ${o}`),{data:(await this.config.request({url:`${r.baseUrl||mt}/${t.resourceId}/rest/api/2/search?jql=${i.join(" AND ")}&startAt=0&maxResults=${ct}&fields=${["assignee","comment","summary","created","creator","updated","votes"].join(",")}`,headers:y(r.token||this.config.token)})).body.issues.map(ht)}}};var ft="https://api.trello.com",Rt=1e3,bt=e=>{let t=new Date(1e3*parseInt(e.id.substring(0,8),16));return{id:e.id,commentCount:e.badges.comments,number:e.idShort.toString(),title:e.name,url:e.url,createdDate:new Date(t.toISOString()),author:null,updatedDate:new Date(e.dateLastActivity),assignees:e.idMembers.map(r=>({id:r,username:null,name:null,email:null,avatarUrl:null})),description:null,state:null,repository:null,upvoteCount:e.badges.votes}},H=class extends w{async getIssuesForBoard(t,r={}){let n=["-is:archived","sort:edited"],{appKey:s,boardId:o,filterText:a,assigneeLogins:i}=t||{};i&&n.push("@me");let u=`${a?`${a}`:""}${n.join(" ")} board:${o}`;return{data:(await this.config.request({url:`${r.baseUrl||ft}/1/search?key=${s}&query=${u}&cards_limit=${Rt}&token=${r.token||this.config.token}`,headers:y(r.token||this.config.token)})).body.cards.map(bt)}}};var J={};G(J,{getIssueUniqueId:()=>yt,getPullRequestUniqueId:()=>It});var yt=async(e,t,r,n="")=>{let s=[];return s.push(n),s.push(e),s.push(t),s.push(r),JSON.stringify(s)},It=async(e,t,r,n,s="")=>{let o=[];return o.push(s),o.push(e),o.push(t),o.push(r),o.push(n),JSON.stringify(o)};var X={};G(X,{getIssueUniqueId:()=>Pt,getPullRequestUniqueId:()=>vt});var Pt=async(e,t)=>JSON.stringify(["",e,t]),vt=async(e,t)=>JSON.stringify(["",e,t]);var K={};G(K,{getIssueUniqueId:()=>Ct,getPullRequestUniqueId:()=>wt});var Ct=async(e,t,r)=>JSON.stringify([r,e,t]),wt=async(e,t,r)=>JSON.stringify([r,e,t]);var Z={};G(Z,{getIssueUniqueId:()=>Ut,getPullRequestUniqueId:()=>Et});var Ut=async(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)},Et=async(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)};var Y={};G(Y,{getIssueUniqueId:()=>St,getPullRequestUniqueId:()=>Dt});var St=async(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)},Dt=async(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)};var ee={};G(ee,{getIssueUniqueId:()=>$t});var $t=async(e,t,r,n="")=>{let s=[];return s.push(n),s.push(e),s.push(t),s.push(r),JSON.stringify(s)};var te={};G(te,{getIssueUniqueId:()=>Gt});var Gt=(e,t,r,n="")=>{let s=[];return s.push(n),s.push(e),s.push(t),s.push(r),JSON.stringify(s)};var Lt=e=>{let t={request:e==null?void 0:e.request};return{azureDevOps:new B({...t,...e==null?void 0:e.azureDevOps}),bitbucket:new N({...t,...e==null?void 0:e.bitbucket}),bitbucketServer:new j({...t,...e==null?void 0:e.bitbucketServer}),github:new F({...t,...e==null?void 0:e.github}),gitlab:new z({...t,...e==null?void 0:e.gitlab}),jira:new M({...t,...e==null?void 0:e.jira}),trello:new H({...t,...e==null?void 0:e.trello})}},At=Lt;var Tt={azureDevOps:J,bitbucket:X,bitbucketServer:K,github:Z,gitlab:Y,jira:ee,trello:te};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Account, CursorPageInput, GetRepoInput, GitProvider, GitPullRequest, NumberedPageInput, Options } from '../gitProvider';
|
|
1
|
+
import { Account, CursorPageInput, GetRepoInput, GitProvider, GitPullRequest, GitRepository, NumberedPageInput, Options } from '../gitProvider';
|
|
2
2
|
import { Provider } from '../provider';
|
|
3
3
|
export interface RefreshTokenResponse {
|
|
4
4
|
access_token: string;
|
|
@@ -29,32 +29,17 @@ export declare class Bitbucket extends Provider implements GitProvider {
|
|
|
29
29
|
};
|
|
30
30
|
}>;
|
|
31
31
|
getRepo(inputs: GetRepoInput, options?: Options): Promise<{
|
|
32
|
-
data:
|
|
33
|
-
id: string;
|
|
34
|
-
namespace: string;
|
|
35
|
-
name: string;
|
|
36
|
-
webUrl: string;
|
|
37
|
-
httpsUrl: string | null;
|
|
38
|
-
sshUrl: string | null;
|
|
39
|
-
defaultBranch: {
|
|
40
|
-
name: string;
|
|
41
|
-
};
|
|
42
|
-
permission: null;
|
|
43
|
-
};
|
|
32
|
+
data: GitRepository;
|
|
44
33
|
}>;
|
|
45
34
|
getRepos(inputs: GetRepoInput[], options?: Options): Promise<{
|
|
46
|
-
data:
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
name: string;
|
|
55
|
-
};
|
|
56
|
-
permission: null;
|
|
57
|
-
}[];
|
|
35
|
+
data: GitRepository[];
|
|
36
|
+
}>;
|
|
37
|
+
getReposForCurrentUser(inputs?: CursorPageInput, options?: Options): Promise<{
|
|
38
|
+
pageInfo: {
|
|
39
|
+
hasNextPage: boolean;
|
|
40
|
+
endCursor: string | null;
|
|
41
|
+
};
|
|
42
|
+
data: GitRepository[];
|
|
58
43
|
}>;
|
|
59
44
|
getBranches(input: {
|
|
60
45
|
repo: GetRepoInput;
|
|
@@ -16,6 +16,14 @@ export interface Account extends User {
|
|
|
16
16
|
graphQLId?: string;
|
|
17
17
|
username: string | null;
|
|
18
18
|
}
|
|
19
|
+
export interface Organization {
|
|
20
|
+
id: string;
|
|
21
|
+
graphQLId?: string;
|
|
22
|
+
username: string;
|
|
23
|
+
name: string | null;
|
|
24
|
+
email: string | null;
|
|
25
|
+
avatarUrl: string;
|
|
26
|
+
}
|
|
19
27
|
export interface GitRepository {
|
|
20
28
|
id: string;
|
|
21
29
|
graphQLId?: string;
|
|
@@ -153,6 +161,7 @@ export interface GitProvider {
|
|
|
153
161
|
}, options: Options): Promise<Result<Account>>;
|
|
154
162
|
getRepo(input: GetRepoInput, options: Options): Promise<Result<GitRepository>>;
|
|
155
163
|
getRepos(inputs: GetRepoInput[], options: Options): Promise<Result<GitRepository[]>>;
|
|
164
|
+
getReposForCurrentUser?(inputs: CursorPageInput, options: Options): Promise<PagedResult<GitRepository>>;
|
|
156
165
|
getBranches?(input: {
|
|
157
166
|
repo: GetRepoInput;
|
|
158
167
|
} & PageInput, options: Options): Promise<PagedResult<GitRefWithCommit>>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PagedResult } from '../../types';
|
|
2
|
+
import { Account, CursorPageInput, EnterpriseOptions, GetRepoInput, GitProvider, GitPullRequest, GitRepository, Organization } from '../gitProvider';
|
|
2
3
|
import { Issue } from '../issueProvider';
|
|
3
4
|
import { EnterpriseProvider } from '../provider';
|
|
4
5
|
import { FetchIssuesData, FetchPullRequestsData } from './githubTypes';
|
|
@@ -35,12 +36,31 @@ export declare class GitHub extends EnterpriseProvider implements GitProvider {
|
|
|
35
36
|
}, options?: EnterpriseOptions): Promise<{
|
|
36
37
|
data: Account;
|
|
37
38
|
}>;
|
|
39
|
+
getOrgsForCurrentUser(input?: CursorPageInput, options?: EnterpriseOptions): Promise<PagedResult<Organization>>;
|
|
38
40
|
getRepo(input: GetRepoInput, options?: EnterpriseOptions): Promise<{
|
|
39
41
|
data: GitRepository;
|
|
40
42
|
}>;
|
|
41
43
|
getRepos(inputs: GetRepoInput[], options?: EnterpriseOptions): Promise<{
|
|
42
44
|
data: GitRepository[];
|
|
43
45
|
}>;
|
|
46
|
+
getReposForUsernames(input: {
|
|
47
|
+
usernames: string[];
|
|
48
|
+
} & CursorPageInput, options?: EnterpriseOptions): Promise<{
|
|
49
|
+
pageInfo: {
|
|
50
|
+
endCursor: string | null;
|
|
51
|
+
hasNextPage: boolean;
|
|
52
|
+
};
|
|
53
|
+
data: GitRepository[];
|
|
54
|
+
}>;
|
|
55
|
+
getReposForOwners(input: {
|
|
56
|
+
owners: (Account | Organization)[];
|
|
57
|
+
} & CursorPageInput, options?: EnterpriseOptions): Promise<{
|
|
58
|
+
pageInfo: {
|
|
59
|
+
endCursor: string | null;
|
|
60
|
+
hasNextPage: boolean;
|
|
61
|
+
};
|
|
62
|
+
data: GitRepository[];
|
|
63
|
+
}>;
|
|
44
64
|
private getRefs;
|
|
45
65
|
getBranches(input: {
|
|
46
66
|
repo: GetRepoInput;
|
|
@@ -39,6 +39,14 @@ export interface GraphQLUser {
|
|
|
39
39
|
email?: string;
|
|
40
40
|
avatarUrl: string;
|
|
41
41
|
}
|
|
42
|
+
export interface GraphQLOrganization {
|
|
43
|
+
id: string;
|
|
44
|
+
databaseId: number;
|
|
45
|
+
name: string | null;
|
|
46
|
+
login: string;
|
|
47
|
+
email?: string;
|
|
48
|
+
avatarUrl: string;
|
|
49
|
+
}
|
|
42
50
|
export type PullRequestState = 'OPEN' | 'CLOSED' | 'MERGED';
|
|
43
51
|
export interface GraphQLPullRequest {
|
|
44
52
|
id: string;
|
|
@@ -32,6 +32,13 @@ export declare class GitLab extends EnterpriseProvider implements GitProvider, I
|
|
|
32
32
|
getRepos(inputs: GetRepoInput[], options?: EnterpriseOptions): Promise<{
|
|
33
33
|
data: GitRepository[];
|
|
34
34
|
}>;
|
|
35
|
+
getReposForCurrentUser(input?: CursorPageInput, options?: EnterpriseOptions): Promise<{
|
|
36
|
+
pageInfo: {
|
|
37
|
+
endCursor: string | null;
|
|
38
|
+
hasNextPage: boolean;
|
|
39
|
+
};
|
|
40
|
+
data: GitRepository[];
|
|
41
|
+
}>;
|
|
35
42
|
private getRefs;
|
|
36
43
|
getBranches(input: {
|
|
37
44
|
repo: GetRepoInput;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gitkraken/provider-apis",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.2",
|
|
4
4
|
"description": "An SDK around different third-party APIs that accepts and returns data in a common format.",
|
|
5
5
|
"author": "Axosoft, LLC dba GitKraken",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|