@gitkraken/provider-apis 0.8.1 → 0.8.3

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 CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.8.3
4
+
5
+ - added `getAzureProjects` (Azure DevOps)
6
+ - added `getPullRequestRank` to `GitHubUtils`
7
+ - added `type` field to `Issue` (GitLab, Azure DevOps, and Jira)
8
+
9
+ ## 0.8.2
10
+
11
+ - added `getOrgsForCurrentUser` (GitHub)
12
+ - added `getReposForUsernames` (GitHub)
13
+ - added `getReposForOwners` (GitHub)
14
+ - added `getReposForCurrentUser` (GitLab and Bitbucket)
15
+
3
16
  ## 0.8.1
4
17
 
5
18
  - 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 L=(e,t)=>{for(var r in t)W(e,r,{get:t[r],enumerable:!0})},ye=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of _e(t))!ke.call(e,n)&&n!==r&&W(e,n,{get:()=>t[n],enumerable:!(s=qe(t,n))||s.enumerable});return e};var Be=(e,t,r)=>(r=e!=null?xe(Oe(e)):{},ye(t||!e||!e.__esModule?W(r,"default",{value:e,enumerable:!0}):r,e)),je=e=>ye(W({},"__esModule",{value:!0}),e);var qt={};L(qt,{AzureDevOps:()=>B,AzureDevopsUtils:()=>X,Bitbucket:()=>j,BitbucketServer:()=>N,BitbucketServerUtils:()=>Z,BitbucketUtils:()=>K,GitHub:()=>F,GitHubUtils:()=>Y,GitLab:()=>z,GitLabUtils:()=>ee,Jira:()=>M,JiraUtils:()=>te,Trello:()=>H,TrelloUtils:()=>re,Utils:()=>xt,default:()=>Tt});module.exports=je(qt);var v=100;var Ie=Be(require("node-fetch")),Pe=globalThis.fetch||Ie.default;var ve=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 s={body:r,headers:Object.fromEntries(e.headers.entries()),status:e.status,statusText:e.statusText};if(!e.ok){let n=new Error(e.statusText);throw Object.assign(n,{response:s}),n}return s},se=e=>ve(e)?async({url:t,...r})=>{let s=await e(t,r);return Ne(s)}:e;var w=class{constructor(t){this.config={...t,request:se((t==null?void 0:t.request)||Pe)}}updateConfig(t){this.config={...this.config,...t,request:t.request?se(t.request):this.config.request}}},A=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",$="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"},ne=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,Ce=e=>({id:e.pullRequestId.toString(),title:e.title,number:e.codeReviewId,state:Qe[e.status],isDraft:e.isDraft,commentCount:null,upvoteCount:null,author:ne(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(ne),reviews:e.reviewers.filter(t=>t.vote!==0).map(t=>({reviewer:ne(t),state:ze[t.vote]||"REVIEW_REQUESTED"})),additions:null,deletions:null,fileCount:null,commitCount:null,headRepository:null,mergeableState:"UNKNOWN"}),we=(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,type:t["System.WorkItemType"],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 n=(await this.config.request({url:`${$}/${encodeURIComponent(t.namespace)}/_apis/ConnectionData`,headers:U(this.config,r)})).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(t,r={}){if(!t.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let n=(await this.config.request({url:`${$}/${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:n.name,email:n.email,avatarUrl:n.imageUrl}}}async getAzureProjects(t,r={}){let s=new URL(`${$}/${encodeURIComponent(t.namespace)}/_apis/projects`);s.searchParams.set("$top",v.toString()),t.cursor&&s.searchParams.set("$skip",t.cursor);let n=await this.config.request({url:s.toString(),headers:U(this.config,r)}),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:t.namespace}))}}async getRepo(t,r={}){if(!t.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=await this.config.request({url:`${$}/${encodeURIComponent(t.namespace)}/${encodeURIComponent(t.project)}/_apis/git/repositories/${encodeURIComponent(t.name)}`,headers:U(this.config,r)});return{data:we(t.namespace,s.body)}}async getRepos(t,r={}){return{data:(await Promise.all(t.map(n=>this.getRepo(n,r)))).map(n=>n.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:`${$}/${encodeURIComponent(t.namespace)}/${encodeURIComponent(t.project)}/_apis/git/repositories`,headers:U(this.config,r)})).body.value.map(n=>we(t.namespace,n))}}async getRefs(t,r,s={}){if(!r.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let n=new URL(`${$}/${encodeURIComponent(r.repo.namespace)}/${encodeURIComponent(r.repo.project)}/_apis/git/repositories/${encodeURIComponent(r.repo.name)}/refs`);n.searchParams.set("filter",t),n.searchParams.set("$top",v.toString()),r.cursor&&n.searchParams.set("continuationToken",r.cursor);let o=await this.config.request({url:n.toString(),headers:U(this.config,s)}),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={},s=100){let{page:n,repo:o,assigneeLogins:a,authorLogin:i}=t||{},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:`${r.baseUrl||$}/${encodeURIComponent(o.namespace)}/${encodeURIComponent(o.project||"")}/_apis/git/repositories/${encodeURIComponent(o.name)}/pullRequests?${l}&%24top=${s}&%24skip=${(u-1)*s}`,headers:U(this.config,r)})}async getPullRequestsForRepo(t,r={}){let n=t.page||1,o=await this.getPullRequestsForRepoBase(t,r,100);return{pageInfo:{hasNextPage:o.body.value.length===100,nextPage:n+1},data:o.body.value.map(Ce)}}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:s}=t||{},n=[];return await Promise.all(s.map(async o=>{try{(await this.getPullRequestsForRepoBase({repo:o,...t},r)).body.value.forEach(i=>{n.push(Ce(i))})}catch(a){if(a.statusCode!==404&&a.statusCode!==401)throw a}})),{data:n}}async getIssuesForAzureProject(t,r={}){let{page:s,assigneeLogins:n,authorLogin:o,mentionLogin:a}=t||{},i=s||1,u=200,l=["[Microsoft.VSTS.Common.ClosedDate] = ''","[System.TeamProject] = @project","[Microsoft.VSTS.Common.ResolvedDate] = ''"];o&&l.push(`[System.CreatedBy] = '${o.replace("'","''")}'`),n&&n[0]&&l.push(`[System.AssignedTo] = '${n[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||$}/${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||$}/${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"},Ee=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(s=>s.name==="https"))==null?void 0:t.href)??null,sshUrl:((r=e.links.clone.find(s=>s.name==="ssh"))==null?void 0:r.href)??null,defaultBranch:{name:e.mainbranch.name},permission:null}},Se=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:Ee(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"}},j=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:Ee(r.body)}}async getUserForCommit(t,r={}){var a;let n=(await this.config.request({url:`${q}/repositories/${t.repo.namespace}/${t.repo.name}/commit/${t.oid}`,headers:T(this.config,r)})).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(t,r={}){let s=await this.config.request({url:`${q}/repositories/${t.namespace}/${t.name}`,headers:T(this.config,r)});return{data:Ue(s.body)}}async getRepos(t,r={}){return{data:(await Promise.all(t.map(n=>this.getRepo(n,r)))).map(n=>n.data)}}async getReposForCurrentUser(t={},r={}){let s=new URL(`${q}/repositories`);s.searchParams.set("role","member"),s.searchParams.set("pagelen",v.toString()),t.cursor&&s.searchParams.set("after",t.cursor);let n=await this.config.request({url:s.toString(),headers:T(this.config,r)}),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(Ue)}}async getBranches(t,r={}){var a;let s=new URL(`${q}/repositories/${t.repo.namespace}/${t.repo.name}/refs/branches`);s.searchParams.set("page",((a=t.page)==null?void 0:a.toString())||"1"),s.searchParams.set("pagelen",v.toString());let n=await this.config.request({url:s.toString(),headers:T(this.config,r)}),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(t,r={}){let s=new URL(`${q}/repositories/${t.repo.namespace}/${t.repo.name}/refs/tags`);s.searchParams.set("pagelen",v.toString()),t.cursor&&s.searchParams.set("page",t.cursor);let n=await this.config.request({url:s.toString(),headers:T(this.config,r)}),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 getPullRequestsForRepoBase(t,r={}){var n;let s=new URL(`${q}/repositories/${encodeURI(t.repo.namespace)}/${encodeURI(t.repo.name)}/pullrequests?state=OPEN`);return s.searchParams.set("page",((n=t.page)==null?void 0:n.toString())||"1"),s.searchParams.set("pagelen","50"),await this.config.request({url:s.toString(),headers:T(this.config,r)})}async getPullRequestsForRepo(t,r={}){let s=[],n=await this.getPullRequestsForRepoBase(t,r);n.body.values.forEach(a=>{if(t.authorLogin&&a.author.uuid!==t.authorLogin)return null;s.push(Se(a))});let o=!!n.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?n.body.page+1:null},data:s}}async getPullRequestsForRepos(t,r={}){let s=[];return await Promise.all(t.repos.map(async n=>{try{(await this.getPullRequestsForRepoBase({repo:n,...t},r)).body.values.forEach(a=>{if(t.authorLogin&&a.author.uuid!==t.authorLogin)return null;s.push(Se(a))})}catch(o){if(o.statusCode!==404&&o.statusCode!==401)throw o}})),{data:s}}};var N=class extends A{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 n,o,a;let s=await this.config.request({url:`${this.getBaseUrl(r)}/projects/${t.namespace}/repos/${t.name}`,headers:this.getRequestHeaders(r)});return{data:{id:s.body.id.toString(),namespace:s.body.project.key,name:s.body.slug,webUrl:((n=s.body.links.self[0])==null?void 0:n.href)??null,httpsUrl:((o=s.body.links.clone.find(i=>i.name==="https"))==null?void 0:o.href)??null,sshUrl:((a=s.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(n=>this.getRepo(n,r)))).map(n=>n.data)}}};var ie="https://api.github.com",We=`${ie}/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 s=y(r.token||e.token);return s["X-Github-Next-Global-ID"]="1",s["Content-Type"]="application/json",e.request({url:Je(e,r),method:"POST",headers:s,body:JSON.stringify(t)})},Xe={user:!0,"user:email":!0,"read:user":!0},O=e=>e.some(t=>Xe[t]),S=(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
- `,Xe=(e,t=!1)=>`
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
- ${w(!1,t)}
16
+ ${S(!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
- ${w(!1,t)}
76
+ ${S(!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
- ${w(!1,t)}
84
+ ${S(!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
- ${w(!1,t)}
93
+ ${S(!1,t)}
94
94
  }
95
95
  }
96
96
  state
@@ -100,7 +100,7 @@ additions
100
100
  deletions
101
101
  changedFiles
102
102
  mergeable
103
- `,Ke={"-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"},Ze=new RegExp('(([^\\s]+:)?\\"(?:[^\\"\\\\]|\\\\.)*\\"?)|([^\\"\\s]+)',"g"),ie=e=>{let t=[];return(e.match(Ze)??[]).forEach(n=>{if(n.includes(":")&&n!="is:closed"){let s=n.split(":")[0];Ke[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:m,startQuery:c,mentionLogin:d}=t||{},g=ie(c||"");p.forEach(f=>{g.push(`repo:${f.namespace}/${f.name}`)}),a&&a.forEach(f=>{g.push(`assignee:${f}`)}),i&&g.push(`updated:<${i}`),n&&u!=null&&u!=null&&g.push(`draft:${String(u)}`),l&&g.push(`author:${l}`),m&&g.push(`review-requested:${m}`),d&&g.push(`mentions:${d}`);let b=`
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"),ue=e=>{let t=[];return(e.match(Ye)??[]).forEach(s=>{if(s.includes(":")&&s!="is:closed"){let n=s.split(":")[0];Ze[n]&&t.push(s)}}),t},le=async(e,t,r,s=!0,n=!1)=>{let{cursor:o,assigneeLogins:a,updatedBefore:i,isDraft:u,authorLogin:l,repos:p,reviewRequestedLogin:g,startQuery:m,mentionLogin:d}=t||{},c=ue(m||"");p.forEach(f=>{c.push(`repo:${f.namespace}/${f.name}`)}),a&&a.forEach(f=>{c.push(`assignee:${f}`)}),i&&c.push(`updated:<${i}`),s&&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
- ${Xe(n,s)}
116
+ ${Ke(s,n)}
117
117
  }
118
118
  }
119
119
  pageInfo {
@@ -123,7 +123,7 @@ query (
123
123
  }
124
124
  }
125
125
  }
126
- `;return P(e,{query:`${b}`,variables:{after:o??null,search:`sort:updated type:pr state:open ${g.join(" ")}`}},r)};var Ue=`
126
+ `;return I(e,{query:`${b}`,variables:{after:o??null,search:`sort:updated type:pr state:open ${c.join(" ")}`}},r)};var pe=`
127
127
  id
128
128
  databaseId
129
129
  owner {
@@ -136,13 +136,13 @@ defaultBranchRef {
136
136
  name
137
137
  }
138
138
  viewerPermission
139
- `,le={id:"U_kgDNJ5k",databaseId:10137,name:"Deleted user",login:"ghost",email:"",avatarUrl:"https://avatars.githubusercontent.com/u/10137?v=4"},Ye={APPROVED:"APPROVED",CHANGES_REQUESTED:"CHANGES_REQUESTED",COMMENTED:"COMMENTED",REVIEW_REQUESTED:"REVIEW_REQUESTED"},et={MERGEABLE:"MERGEABLE",CONFLICTING:"CONFLICTS",UNKNOWN:"UNKNOWN"},we=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}),tt={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}),rt=e=>{var l,p,m,c,d,g,b,f;let t=e.author?e.author.id?e.author:null:le,r=(p=(l=e.commits.nodes)==null?void 0:l[0])==null?void 0:p.commit,n=((m=e.headRef)==null?void 0:m.target)||r,s=n==null?void 0:n.oid,o=r==null?void 0:r.oid,a=s===o?(d=(c=r==null?void 0:r.status)==null?void 0:c.contexts)==null?void 0:d[0]:null,i=(((g=e.reviewRequests)==null?void 0:g.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:tt[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||le;return{reviewer:$(R),state:Ye[h.state]}})),additions:e.additions,deletions:e.deletions,fileCount:e.changedFiles,commitCount:e.commits.totalCount,mergeableState:et[e.mergeable]}},st=e=>{var r;let t=(r=e.author)!=null&&r.id?e.author:le;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 P(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 P(this.config,{query:`
139
+ `,ge={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"},de=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"},G=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:ge,r=(p=(l=e.commits.nodes)==null?void 0:l[0])==null?void 0:p.commit,s=((g=e.headRef)==null?void 0:g.target)||r,n=s==null?void 0:s.oid,o=r==null?void 0:r.oid,a=n===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?G(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(G):null,reviews:i.map(h=>({reviewer:G(h.requestedReviewer),state:"REVIEW_REQUESTED"})).concat((((f=e.latestReviews)==null?void 0:f.nodes)||[]).map(h=>{let R=h.author||ge;return{reviewer:G(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:ge;return{id:e.databaseId.toString(),graphQLId:e.id,number:e.number,title:e.title,author:G(t),commentCount:e.comments.totalCount,createdDate:new Date(e.createdAt),description:null,state:null,type: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(G):[],upvoteCount:e.reactions.totalCount}},F=class extends A{constructor(){super(...arguments);this._scopesCache={}}async getScopes(r){let s=r.token||this.config.token;if(!s)return[];let n=this._scopesCache[s];if(!n){let a=(await I(this.config,{query:"query { rateLimit(dryRun: true) { __typename } }"},r)).headers["x-oauth-scopes"];n=a?a.split(", "):[],this._scopesCache[s]=n}return n}getEnterpriseAvatarUrlIfNeeded(r,s,n){let o=n.baseUrl||this.config.baseUrl;return!o||o.startsWith(ie)?r:s?`https://avatars.githubusercontent.com/u/e?email=${encodeURIComponent(s)}`:""}async getCurrentUser(r={}){var a;let s=await this.getScopes(r),o=(a=(await I(this.config,{query:`
140
140
  query getCurrentUser {
141
141
  viewer {
142
- ${w(!1,k(n))}
142
+ ${S(!1,O(s))}
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 P(this.config,{query:`
145
+ `},r)).body.data)==null?void 0:a.viewer;if(!o)throw new Error("Current user not found.");return{data:G(o)}}async getUserForCommit(r,s={}){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 P(this.config,{query:`
164
+ `,variables:{owner:r.repo.namespace,name:r.repo.name,oid:r.oid,avatarSize:r.avatarSize}},s)).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,s)}}}async getAccountForEmail(r,s={}){var i,u,l;let n=await this.getScopes(s),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
- ${w(!0,k(s))}
169
+ ${S(!0,O(n))}
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 P(this.config,{query:`
174
+ `,variables:{query:`in:email ${r.email}`,avatarSize:r.avatarSize}},s)).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:G({...a,avatarUrl:this.getEnterpriseAvatarUrlIfNeeded(a.avatarUrl,a.email,s)})}}async getAccountForUsername(r,s={}){var i;let n=await this.getScopes(s),a=(i=(await I(this.config,{query:`
175
175
  query getUserForUsername($login: String! $avatarSize: Int) {
176
176
  user(login: $login) {
177
- ${w(!0,k(s))}
177
+ ${S(!0,O(n))}
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 getRepo(r,n={}){var o;let s=await P(this.config,{query:`
180
+ `,variables:{login:r.username,avatarSize:r.avatarSize}},s)).body.data)==null?void 0:i.user;if(!a)throw new Error("User not found.");return{data:G({...a,avatarUrl:this.getEnterpriseAvatarUrlIfNeeded(a.avatarUrl,a.email,s)})}}async getOrgsForCurrentUser(r={},s={}){var a,i;let n=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:v}},s);if(!((a=n.body.data)!=null&&a.viewer.organizations))throw new Error(((i=n.body.errors)==null?void 0:i[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(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,s={}){var o;let n=await I(this.config,{query:`
181
200
  query getRepo($owner: String!, $name: String!) {
182
201
  repository(owner: $owner, name: $name) {
183
- ${Ue}
202
+ ${pe}
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:we(s.body.data.repository)}}async getRepos(r,n={}){let s=r.map(({namespace:a,name:i},u)=>`
205
+ `,variables:{owner:r.namespace,name:r.name}},s);if(!((o=n.body.data)!=null&&o.repository))throw new Error(`Repository ${r.namespace}/${r.name} not found`);return{data:de(n.body.data.repository)}}async getRepos(r,s={}){let n=r.map(({namespace:a,name:i},u)=>`
187
206
  getRepo_${u}: repository(owner: "${a}", name: "${i}") {
188
- ${Ue}
207
+ ${pe}
189
208
  }
190
209
  `).join(`
191
- `),o=await P(this.config,{query:`
210
+ `),o=await I(this.config,{query:`
192
211
  query batchGetRepos {
193
- ${s}
212
+ ${n}
213
+ }
214
+ `},s);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 de(l)})}}async getReposForUsernames(r,s={}){var a;if(!r.usernames.length)return{pageInfo:{endCursor:null,hasNextPage:!1},data:[]};let n=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
+ ${pe}
224
+ }
225
+ }
226
+ }
194
227
  }
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 we(l)})}}async getRefs(r,n,s={}){var u;let a=(u=(await P(this.config,{query:`
228
+ `,variables:{query:`fork:true ${r.usernames.map(i=>`user:${i}`).join(" ")}`,cursor:r.cursor,first:v}},s);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(de)}}async getReposForOwners(r,s={}){return this.getReposForUsernames({usernames:r.owners.filter(n=>n.username).map(n=>n.username),cursor:r.cursor},s)}async getRefs(r,s,n={}){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:D}},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 m;let p=(m=l.target)!=null&&m.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 P(this.config,{query:`
249
+ `,variables:{owner:s.repo.namespace,name:s.repo.name,refPrefix:r,cursor:s.cursor,first:v}},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 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,s={}){return this.getRefs("refs/heads/",r,s)}async getTags(r,s={}){return this.getRefs("refs/tags/",r,s)}async getBlame(r,s={}){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,c,d,g,b,f;let s=await this.getScopes(n),o=k(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=(c=(m=i.body)==null?void 0:m.data)==null?void 0:c.search)==null?void 0:d.nodes)||[];return{pageInfo:(f=(b=(g=i.body)==null?void 0:g.data)==null?void 0:b.search)==null?void 0:f.pageInfo,data:u.map(rt)}}async getIssuesForRepos(r,n={}){var b,f,h,R,I,E;let s=await this.getScopes(n),o=k(s),a=ie(r.startQuery||""),{cursor:i,assigneeLogins:u,updatedBefore:l,authorLogin:p,mentionLogin:m}=r||{};r.repos.forEach(S=>{a.push(`repo:${S.namespace}/${S.name}`)}),u&&u.forEach(S=>{a.push(`assignee:${S}`)}),l&&a.push(`updated:<${l}`),p&&a.push(`author:${p}`),m&&a.push(`mentions:${m}`);let c=`
288
+ `,variables:{owner:r.repo.namespace,name:r.repo.name,ref:r.ref,path:r.path}},s)).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,s={}){var l,p,g,m,d,c,b,f;let n=await this.getScopes(s),o=O(n),a="Field 'isDraft' doesn't exist on type 'PullRequest'",i=await le(this.config,r,s,!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;s.baseUrl&&R&&(i=await le(this.config,r,s,!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,s={}){var b,f,h,R,P,E;let n=await this.getScopes(s),o=O(n),a=ue(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
- ${w(!1,o)}
306
+ ${S(!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
- ${w(!1,o)}
327
+ ${S(!1,o)}
295
328
  }
296
329
  }
297
330
  }
@@ -303,7 +336,7 @@ query (
303
336
  }
304
337
  }
305
338
  }
306
- `,d=await P(this.config,{query:`${c}`,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 g=((h=(f=(b=d.body)==null?void 0:b.data)==null?void 0:f.search)==null?void 0:h.nodes)||[];return{pageInfo:(E=(I=(R=d.body)==null?void 0:R.data)==null?void 0:I.search)==null?void 0:E.pageInfo,data:g.map(st)}}};var nt="https://gitlab.com/api/v4",ot="https://gitlab.com/api/graphql",Ee=/\/api\/v\d+$/,Se=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.")},pe=(e,t)=>{let r=t.baseUrl||e.baseUrl;return r?(r=r.replace(/\/$/,""),Se(r),r):nt},at=(e,t)=>{let r=t.baseUrl||e.baseUrl;return r?(r=r.replace(/\/$/,""),Se(r),Ee.test(r)&&(r=r.replace(Ee,"")),`${r}/api/graphql`):ot},v=(e,t,r)=>{let n=y(r.token||e.token);return e.request({url:at(e,r),method:"POST",headers:{...n,"Content-Type":"application/json"},body:JSON.stringify(t)})};var it={CAN_BE_MERGED:"MERGEABLE",CANNOT_BE_MERGED:"CONFLICTS",CANNOT_BE_MERGED_RECHECK:"UNKNOWN",UNCHECKED:"UNKNOWN",CHECKING:"UNKNOWN"},ce="gid://gitlab/User/",Q="gid://gitlab/Project/",ut="gid://gitlab/MergeRequest/",lt="gid://gitlab/Issue/",De=`
339
+ `,d=await I(this.config,{query:`${m}`,variables:{after:i??null,search:`sort:updated type:issue state:open ${a.join(" ")}`}},s);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:(E=(P=(R=d.body)==null?void 0:R.data)==null?void 0:P.search)==null?void 0:E.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.")},me=(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},C=(e,t,r)=>{let s=y(r.token||e.token);return e.request({url:it(e,r),method:"POST",headers:{...s,"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"},be="gid://gitlab/User/",Q="gid://gitlab/Project/",lt="gid://gitlab/MergeRequest/",pt="gid://gitlab/Issue/",ce=`
307
340
  id
308
341
  path
309
342
  fullPath
@@ -313,19 +346,19 @@ sshUrlToRepo
313
346
  repository {
314
347
  rootRef
315
348
  }
316
- `,T=`
349
+ `,x=`
317
350
  id
318
351
  name
319
352
  username
320
353
  publicEmail
321
354
  avatarUrl
322
- `,de=`
355
+ `,he=`
323
356
  author {
324
- ${T}
357
+ ${x}
325
358
  }
326
359
  assignees {
327
360
  nodes {
328
- ${T}
361
+ ${x}
329
362
  }
330
363
  }
331
364
  createdAt
@@ -335,15 +368,16 @@ id
335
368
  iid
336
369
  state
337
370
  title
371
+ type
338
372
  updatedAt
339
373
  upvotes
340
374
  userNotesCount
341
375
  webUrl
342
- `,$e=`
376
+ `,Le=`
343
377
  id
344
378
  state
345
379
  author {
346
- ${T}
380
+ ${x}
347
381
  }
348
382
  diffStatsSummary {
349
383
  additions
@@ -364,25 +398,25 @@ targetBranch
364
398
  sourceBranch
365
399
  assignees {
366
400
  nodes {
367
- ${T}
401
+ ${x}
368
402
  }
369
403
  }
370
404
  reviewers {
371
405
  nodes {
372
- ${T}
406
+ ${x}
373
407
  mergeRequestInteraction {
374
408
  approved
375
409
  reviewState
376
410
  }
377
411
  }
378
412
  }
379
- mergeStatusEnum`,_=e=>`${e.namespace}/${e.name}`,pt=e=>`${e.namespace}/${e.name}`,Ge=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}},dt={opened:"OPEN",merged:"MERGED",closed:"CLOSED"},O=e=>({id:e.id.replace(ce,""),graphQLId:e.id,name:e.name,username:e.username,email:e.publicEmail,avatarUrl:e.avatarUrl}),Le=(e,t)=>{var r,n,s,o,a;return{id:e.id.replace(ut,""),graphQLId:e.id,title:e.title,number:parseInt(e.iid,10),state:dt[e.state],commentCount:e.userNotesCount||0,upvoteCount:e.upvotes,author:e.author?O(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(O):null,reviews:(n=e.reviewers)!=null&&n.nodes?e.reviewers.nodes.map(i=>{var u,l;return{reviewer:O(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:it[e.mergeStatusEnum]}},me=(e,t)=>({author:{avatarUrl:e.author.avatarUrl,email:null,graphQLId:e.author.id,id:e.author.id.replace(ce,""),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(ce,""),name:r.name,username:r.username})),commentCount:e.userNotesCount,createdDate:new Date(e.createdAt),description:e.description,graphQLId:e.id,id:e.id.replace(lt,""),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:`
413
+ mergeStatusEnum`,_=e=>`${e.namespace}/${e.name}`,dt=e=>`${e.namespace}/${e.name}`,fe=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(be,""),graphQLId:e.id,name:e.name,username:e.username,email:e.publicEmail,avatarUrl:e.avatarUrl}),Ae=(e,t)=>{var r,s,n,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:(s=e.reviewers)!=null&&s.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:((n=e.diffStatsSummary)==null?void 0:n.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]}},Re=(e,t)=>({author:{avatarUrl:e.author.avatarUrl,email:null,graphQLId:e.author.id,id:e.author.id.replace(be,""),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(be,""),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,type:e.type,title:e.title,url:e.webUrl}),z=class extends A{async getCurrentUser(t={}){var n;let s=(n=(await C(this.config,{query:`
380
414
  query getCurrentUser {
381
415
  currentUser {
382
- ${T}
416
+ ${x}
383
417
  }
384
418
  }
385
- `},t)).body.data)==null?void 0:s.currentUser;if(!n)throw new Error("Current user not found.");return{data:O(n)}}async getUserForCommit(t,r={}){var a,i,u,l;let n=_(t.repo),o=(l=(u=(i=(a=(await v(this.config,{query:`
419
+ `},t)).body.data)==null?void 0:n.currentUser;if(!s)throw new Error("Current user not found.");return{data:k(s)}}async getUserForCommit(t,r={}){var a,i,u,l;let s=_(t.repo),o=(l=(u=(i=(a=(await C(this.config,{query:`
386
420
  query getUserForCommit($fullPath: ID!, $oid: String!) {
387
421
  project(fullPath: $fullPath) {
388
422
  repository {
@@ -396,36 +430,48 @@ query getUserForCommit($fullPath: ID!, $oid: String!) {
396
430
  }
397
431
  }
398
432
  }
399
- `,variables:{fullPath:n,oid:t.oid}},r)).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(t,r={}){var o,a,i;let s=(i=(a=(o=(await v(this.config,{query:`
433
+ `,variables:{fullPath:s,oid:t.oid}},r)).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(t,r={}){var o,a,i;let n=(i=(a=(o=(await C(this.config,{query:`
400
434
  query getAccountForEmail($email: String!) {
401
435
  users(search: $email) {
402
436
  nodes {
403
- ${T}
437
+ ${x}
404
438
  }
405
439
  }
406
440
  }
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:O(s)}}async getAccountForUsername(t,r={}){var o;let s=(o=(await v(this.config,{query:`
441
+ `,variables:{email:t.email}},r)).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:k(n)}}async getAccountForUsername(t,r={}){var o;let n=(o=(await C(this.config,{query:`
408
442
  query getAccountForUsername($username: String!) {
409
443
  user(username: $username) {
410
- ${T}
444
+ ${x}
411
445
  }
412
446
  }
413
- `,variables:{username:t.username}},r)).body.data)==null?void 0:o.user;if(!s)throw new Error("User not found.");return{data:O(s)}}async getRepo(t,r={}){var o;let n=_(t),s=await v(this.config,{query:`
447
+ `,variables:{username:t.username}},r)).body.data)==null?void 0:o.user;if(!n)throw new Error("User not found.");return{data:k(n)}}async getRepo(t,r={}){var o;let s=_(t),n=await C(this.config,{query:`
414
448
  query getRepo($fullPath: ID!) {
415
449
  project(fullPath: $fullPath) {
416
- ${De}
450
+ ${ce}
417
451
  }
418
452
  }
419
- `,variables:{fullPath:n}},r);if(!((o=s.body.data)!=null&&o.project))throw new Error(`Repository ${n} not found`);return{data:Ge(s.body.data.project)}}async getRepos(t,r={}){let n=t.map(_),s=n.map((a,i)=>`
453
+ `,variables:{fullPath:s}},r);if(!((o=n.body.data)!=null&&o.project))throw new Error(`Repository ${s} not found`);return{data:fe(n.body.data.project)}}async getRepos(t,r={}){let s=t.map(_),n=s.map((a,i)=>`
420
454
  getRepo_${i}: project(fullPath: "${a}") {
421
- ${De}
455
+ ${ce}
422
456
  }
423
457
  `).join(`
424
- `),o=await v(this.config,{query:`
458
+ `),o=await C(this.config,{query:`
425
459
  query batchGetRepos {
426
- ${s}
460
+ ${n}
461
+ }
462
+ `},r);if(!o.body.data)throw new Error(o.statusText||"Unknown error");return{data:s.map((a,i)=>{let u=o.body.data[`getRepo_${i}`];if(!u)throw new Error(`Repository ${a} not found`);return fe(u)})}}async getReposForCurrentUser(t={},r={}){var o,a,i,u,l,p;let s=await C(this.config,{query:`
463
+ query getReposForCurrentUser($after: String) {
464
+ projects(membership: true first: 100 after: $after) {
465
+ pageInfo {
466
+ endCursor
467
+ hasNextPage
468
+ }
469
+ nodes {
470
+ ${ce}
471
+ }
472
+ }
427
473
  }
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 Ge(u)})}}async getRefs(t,r,n={}){var u;let s=_(r.repo),o=new URL(`${pe(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",D.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(`${pe(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=(m,c,d)=>{u.push(`$${m}: ${d}`),l.push(`${m}: $${m}`),i[m]=c};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:`
474
+ `,variables:{after:t.cursor}},r);if(!((o=s.body.data)!=null&&o.projects))throw new Error(((a=s.body.errors)==null?void 0:a[0].message)||s.statusText||"Unknown error");let n=((u=(i=s.body.data)==null?void 0:i.projects)==null?void 0:u.nodes)||[];return{pageInfo:(p=(l=s.body.data)==null?void 0:l.projects)==null?void 0:p.pageInfo,data:n.map(fe)}}async getRefs(t,r,s={}){var u;let n=_(r.repo),o=new URL(`${me(this.config,s)}/projects/${encodeURIComponent(n)}/repository/${t}`);o.searchParams.set("page",((u=r.page)==null?void 0:u.toString())||"1"),o.searchParams.set("per_page",v.toString());let a=await this.config.request({url:o.toString(),headers:y(s.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 s=_(t.repo),n=new URL(`${me(this.config,r)}/projects/${encodeURIComponent(s)}/repository/files/${encodeURIComponent(t.path)}/blame`);n.searchParams.set("ref",t.ref);let o=await this.config.request({url:n.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:s,authorLogin:n,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"),n&&p("authorUsername",n,"String"),o&&p("assigneeUsername",o[0],"String"),s!=null&&p("draft",s,"Boolean"),a&&p("reviewerUsername",a,"String"),{variables:i,variableTypes:u,mergeRequestArguments:l}}async getPullRequestsForRepo(t,r={}){var b,f,h;let{cursor:s,repo:n}=t||{},o=_(n),{variables:a,variableTypes:i,mergeRequestArguments:u}=this.getVariablesForPullRequests(t),l={fullPath:o,...a},p=await C(this.config,{query:`
429
475
  query getPullRequestsForRepo(
430
476
  $fullPath: ID!
431
477
  $after: String
@@ -448,12 +494,12 @@ query getPullRequestsForRepo(
448
494
  hasNextPage
449
495
  }
450
496
  nodes {
451
- ${$e}
497
+ ${Le}
452
498
  }
453
499
  }
454
500
  }
455
501
  }
456
- `,variables:{...l,after:n}},r),m=[],c=(b=p.body.data)==null?void 0:b.project,d={name:(c==null?void 0:c.name)||"",owner:((c==null?void 0:c.fullPath)||"").split("/").slice(0,-1).join("/")};return(((f=c==null?void 0:c.mergeRequests)==null?void 0:f.nodes)||[]).forEach(R=>{m.push(Le(R,d))}),{pageInfo:(h=c==null?void 0:c.mergeRequests)==null?void 0:h.pageInfo,data:m}}async getPullRequestsForRepos(t,r={}){var c,d,g,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:`
502
+ `,variables:{...l,after:s}},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:s}=t||{},n=t.repoIds.map(h=>h.toString().startsWith(Q)?h:`${Q}${h}`),{variables:o,variableTypes:a,mergeRequestArguments:i}=this.getVariablesForPullRequests(t),u={projectIds:n,...o},l=await C(this.config,{query:`
457
503
  query getPullRequests(
458
504
  $projectIds: [ID!]
459
505
  $after: String
@@ -477,23 +523,23 @@ query getPullRequests(
477
523
  ${i.length?i.join(" "):""}
478
524
  ) {
479
525
  nodes {
480
- ${$e}
526
+ ${Le}
481
527
  }
482
528
  }
483
529
  }
484
530
  }
485
531
  }
486
- `,variables:{...u,after:n}},r),p=[];return(((d=(c=l.body.data)==null?void 0:c.projects)==null?void 0:d.nodes)||[]).forEach(h=>{var E;let R={name:h.name,owner:h.fullPath.split("/").slice(0,-1).join("/")};(((E=h.mergeRequests)==null?void 0:E.nodes)||[]).forEach(S=>{p.push(Le(S,R))})}),{pageInfo:(f=(b=(g=l.body)==null?void 0:g.data)==null?void 0:b.projects)==null?void 0:f.pageInfo,data:p}}async getIssue(t,r={}){var o,a,i,u,l,p,m;let n=pt(t),s=await v(this.config,{query:`
532
+ `,variables:{...u,after:s}},r),p=[];return(((d=(m=l.body.data)==null?void 0:m.projects)==null?void 0:d.nodes)||[]).forEach(h=>{var E;let R={name:h.name,owner:h.fullPath.split("/").slice(0,-1).join("/")};(((E=h.mergeRequests)==null?void 0:E.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 s=dt(t),n=await C(this.config,{query:`
487
533
  query GetSingleIssue($projectId: ID!, $issueId: String!) {
488
534
  project(fullPath: $projectId) {
489
535
  name
490
536
  fullPath
491
537
  issue(iid: $issueId) {
492
- ${de}
538
+ ${he}
493
539
  }
494
540
  }
495
541
  }
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:me((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:(m=s.body.data)==null?void 0:m.project.fullPath.split("/").slice(0,-1).join("/")})}}getVariablesForIssues(t){let{updatedBefore:r,authorLogin:n,assigneeLogins:s}=t||{},o={},a=[],i=[],u=(l,p,m)=>{a.push(`$${l}: ${m}`),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=`
542
+ `,variables:{issueId:t.id,projectId:s}},r);if(!((o=n.body.data)!=null&&o.project))throw new Error(`Repository ${s} not found`);if(!((i=(a=n.body.data)==null?void 0:a.project)!=null&&i.issue))throw new Error(`Issue ${t.id} not found`);return{data:Re((l=(u=n.body.data)==null?void 0:u.project)==null?void 0:l.issue,{name:(p=n.body.data)==null?void 0:p.project.name,owner:(g=n.body.data)==null?void 0:g.project.fullPath.split("/").slice(0,-1).join("/")})}}getVariablesForIssues(t){let{updatedBefore:r,authorLogin:s,assigneeLogins:n}=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"),s&&u("authorUsername",s,"String"),n&&u("assigneeUsername",n[0],"String"),{variables:o,variableTypes:a,issueArguments:i}}async getIssuesForRepo(t,r={}){var f,h,R;let{cursor:s,repo:n}=t||{},o=_(n),{variables:a,variableTypes:i,issueArguments:u}=this.getVariablesForIssues(t),l={fullPath:o,...a},p=`
497
543
  query GetIssuesFromProject(
498
544
  $fullPath: ID!
499
545
  $after: String
@@ -512,7 +558,7 @@ query GetSingleIssue($projectId: ID!, $issueId: String!) {
512
558
  ${u.length?u.join(" "):""}
513
559
  ) {
514
560
  nodes {
515
- ${de}
561
+ ${he}
516
562
  }
517
563
  pageInfo {
518
564
  endCursor
@@ -520,7 +566,7 @@ query GetSingleIssue($projectId: ID!, $issueId: String!) {
520
566
  }
521
567
  }
522
568
  }
523
- }`,m=await v(this.config,{query:p,variables:{...l,after:n}},r),c=[],d=(f=m.body.data)==null?void 0:f.project,g={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(I=>{c.push(me(I,g))}),{pageInfo:(R=d==null?void 0:d.issues)==null?void 0:R.pageInfo,data:c.sort((I,E)=>(I.updatedDate||I.createdDate).getTime()-(E.updatedDate||E.createdDate).getTime())}}async getIssuesForRepos(t,r={}){var d,g,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=`
569
+ }`,g=await C(this.config,{query:p,variables:{...l,after:s}},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(Re(P,c))}),{pageInfo:(R=d==null?void 0:d.issues)==null?void 0:R.pageInfo,data:m.sort((P,E)=>(P.updatedDate||P.createdDate).getTime()-(E.updatedDate||E.createdDate).getTime())}}async getIssuesForRepos(t,r={}){var d,c,b,f,h;let{cursor:s}=t||{},n=t.repoIds.map(R=>R.toString().startsWith(Q)?R:`${Q}${R}`),{variables:o,variableTypes:a,mergeRequestArguments:i}=this.getVariablesForPullRequests(t),u={projectIds:n,...o},l=`
524
570
  query GetIssuesFromProject(
525
571
  $projectIds: [ID!]
526
572
  $after: String
@@ -544,9 +590,9 @@ query GetSingleIssue($projectId: ID!, $issueId: String!) {
544
590
  ${i.length?i.join(" "):""}
545
591
  ) {
546
592
  nodes {
547
- ${de}
593
+ ${he}
548
594
  }
549
595
  }
550
596
  }
551
597
  }
552
- }`,p=await v(this.config,{query:l,variables:{...u,after:n}},r),m=[];return(((g=(d=p.body.data)==null?void 0:d.projects)==null?void 0:g.nodes)||[]).forEach(R=>{var S;let I={name:R.name,owner:R.fullPath.split("/").slice(0,-1).join("/")};(((S=R.issues)==null?void 0:S.nodes)||[]).forEach(Ae=>m.push(me(Ae,I)))}),{pageInfo:(h=(f=(b=p.body)==null?void 0:b.data)==null?void 0:f.projects)==null?void 0:h.pageInfo,data:m.sort((R,I)=>(R.updatedDate||R.createdDate).getTime()-(I.updatedDate||I.createdDate).getTime())}}};var mt="https://api.atlassian.com/ex/jira",ct=100,gt=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 C{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(gt)}}};var ht="https://api.trello.com",ft=1e3,Rt=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 C{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||ht}/1/search?key=${s}&query=${u}&cards_limit=${ft}&token=${r.token||this.config.token}`,headers:y(r.token||this.config.token)})).body.cards.map(Rt)}}};var J={};G(J,{getIssueUniqueId:()=>bt,getPullRequestUniqueId:()=>yt});var bt=async(e,t,r,n="")=>{let s=[];return s.push(n),s.push(e),s.push(t),s.push(r),JSON.stringify(s)},yt=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:()=>It,getPullRequestUniqueId:()=>Pt});var It=async(e,t)=>JSON.stringify(["",e,t]),Pt=async(e,t)=>JSON.stringify(["",e,t]);var K={};G(K,{getIssueUniqueId:()=>vt,getPullRequestUniqueId:()=>Ct});var vt=async(e,t,r)=>JSON.stringify([r,e,t]),Ct=async(e,t,r)=>JSON.stringify([r,e,t]);var Z={};G(Z,{getIssueUniqueId:()=>Ut,getPullRequestUniqueId:()=>wt});var Ut=async(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)},wt=async(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)};var Y={};G(Y,{getIssueUniqueId:()=>Et,getPullRequestUniqueId:()=>St});var Et=async(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)},St=async(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)};var ee={};G(ee,{getIssueUniqueId:()=>Dt});var Dt=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:()=>$t});var $t=(e,t,r,n="")=>{let s=[];return s.push(n),s.push(e),s.push(t),s.push(r),JSON.stringify(s)};var Gt=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})}},Lt=Gt;var At={azureDevOps:J,bitbucket:X,bitbucketServer:K,github:Z,gitlab:Y,jira:ee,trello:te};
598
+ }`,p=await C(this.config,{query:l,variables:{...u,after:s}},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(Re(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,type:e.fields.issuetype.name,upvoteCount:((r=e.fields.votes)==null?void 0:r.votes)||0}},M=class extends w{async getIssuesForProject(t,r={}){let{assigneeLogins:s,authorLogin:n,mentionLogin:o,project:a}=t||{},i=[`project = "${a}"`];return n&&i.push(`creator in (${n})`),s&&i.push(`assignee in (${s.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","issuetype"].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,type:null,repository:null,upvoteCount:e.badges.votes}},H=class extends w{async getIssuesForBoard(t,r={}){let s=["-is:archived","sort:edited"],{appKey:n,boardId:o,filterText:a,assigneeLogins:i}=t||{};i&&s.push("@me");let u=`${a?`${a}`:""}${s.join(" ")} board:${o}`;return{data:(await this.config.request({url:`${r.baseUrl||ft}/1/search?key=${n}&query=${u}&cards_limit=${Rt}&token=${r.token||this.config.token}`,headers:y(r.token||this.config.token)})).body.cards.map(bt)}}};var X={};L(X,{getIssueUniqueId:()=>yt,getPullRequestUniqueId:()=>It});var yt=async(e,t,r,s="")=>{let n=[];return n.push(s),n.push(e),n.push(t),n.push(r),JSON.stringify(n)},It=async(e,t,r,s,n="")=>{let o=[];return o.push(n),o.push(e),o.push(t),o.push(r),o.push(s),JSON.stringify(o)};var K={};L(K,{getIssueUniqueId:()=>Pt,getPullRequestUniqueId:()=>vt});var Pt=async(e,t)=>JSON.stringify(["",e,t]),vt=async(e,t)=>JSON.stringify(["",e,t]);var Z={};L(Z,{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 Y={};L(Y,{getIssueUniqueId:()=>Ut,getPullRequestRank:()=>Et,getPullRequestUniqueId:()=>St});var Ut=(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)},St=(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)},Et=(e,t,r)=>{var a,i,u;let s=0,n,o;return(a=e.reviews)==null||a.forEach(l=>{l.reviewer.id===t&&(n=l.state),l.state==="CHANGES_REQUESTED"?o="CHANGES_REQUESTED":l.state==="APPROVED"&&o!=="CHANGES_REQUESTED"&&(o="APPROVED")}),o||(o="REVIEW_REQUESTED"),((i=e.author)==null?void 0:i.id)===t?s+=1e3:(u=e.assignees)!=null&&u.find(l=>l.id===t)?s+=900:n==="REVIEW_REQUESTED"?s+=800:r&&(s+=700),o==="APPROVED"?e.mergeableState==="MERGEABLE"?s+=100:e.mergeableState==="CONFLICTS"?s+=90:s+=80:o=="CHANGES_REQUESTED"&&(s+=70),s};var ee={};L(ee,{getIssueUniqueId:()=>Dt,getPullRequestUniqueId:()=>$t});var Dt=async(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)},$t=async(e,t="")=>{let r=[];return r.push(t),r.push(e),JSON.stringify(r)};var te={};L(te,{getIssueUniqueId:()=>Gt});var Gt=async(e,t,r,s="")=>{let n=[];return n.push(s),n.push(e),n.push(t),n.push(r),JSON.stringify(n)};var re={};L(re,{getIssueUniqueId:()=>Lt});var Lt=(e,t,r,s="")=>{let n=[];return n.push(s),n.push(e),n.push(t),n.push(r),JSON.stringify(n)};var At=e=>{let t={request:e==null?void 0:e.request};return{azureDevOps:new B({...t,...e==null?void 0:e.azureDevOps}),bitbucket:new j({...t,...e==null?void 0:e.bitbucket}),bitbucketServer:new N({...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})}},Tt=At;var xt={azureDevOps:X,bitbucket:K,bitbucketServer:Z,github:Y,gitlab:ee,jira:te,trello:re};
@@ -1,2 +1,4 @@
1
- export declare const getIssueUniqueId: (issueGraphqlId: string, domain?: string) => Promise<string>;
2
- export declare const getPullRequestUniqueId: (pullRequestGraphqlId: string, domain?: string) => Promise<string>;
1
+ import { GitPullRequest } from '../index';
2
+ export declare const getIssueUniqueId: (issueGraphqlId: string, domain?: string) => string;
3
+ export declare const getPullRequestUniqueId: (pullRequestGraphqlId: string, domain?: string) => string;
4
+ export declare const getPullRequestRank: (pr: GitPullRequest, currentUsersGithubDatabaseId: string, isFromMentionedFilter: boolean) => number;
@@ -1,3 +1,4 @@
1
+ import { PagedResult } from '../../types';
1
2
  import { CursorPageInput, EnterpriseOptions, GetRepoInput, GitProvider, GitPullRequest, GitRepository, NumberedPageInput, Options } from '../gitProvider';
2
3
  import { Issue } from '../issueProvider';
3
4
  import { Provider } from '../provider';
@@ -8,6 +9,11 @@ export interface AzureGetReposInput {
8
9
  namespace: string;
9
10
  project: string;
10
11
  }
12
+ export interface AzureProject {
13
+ id: string;
14
+ name: string;
15
+ namespace: string;
16
+ }
11
17
  export declare class AzureDevOps extends Provider implements GitProvider {
12
18
  /** Note: PATs are not supported for this function, only OAuth tokens are. */
13
19
  getCurrentUser(options?: EnterpriseOptions): Promise<{
@@ -40,6 +46,9 @@ export declare class AzureDevOps extends Provider implements GitProvider {
40
46
  avatarUrl: string;
41
47
  };
42
48
  }>;
49
+ getAzureProjects(input: {
50
+ namespace: string;
51
+ } & CursorPageInput, options?: Options): Promise<PagedResult<AzureProject>>;
43
52
  getRepo(input: AzureGetRepoInput, options?: Options): Promise<{
44
53
  data: GitRepository;
45
54
  }>;
@@ -18,15 +18,7 @@ interface RepositoryBase {
18
18
  url: string;
19
19
  }
20
20
  export interface Repository extends RepositoryBase {
21
- project: {
22
- id: string;
23
- name: string;
24
- url: string;
25
- state: string;
26
- revision: number;
27
- visibility: string;
28
- lastUpdateTime: string;
29
- };
21
+ project: Project;
30
22
  defaultBranch?: string;
31
23
  size: number;
32
24
  remoteUrl: string;
@@ -53,6 +45,10 @@ interface ProjectBase {
53
45
  visibility: string;
54
46
  lastUpdateTime: string;
55
47
  }
48
+ export interface Project extends ProjectBase {
49
+ url: string;
50
+ revision: number;
51
+ }
56
52
  export interface AzureUser {
57
53
  displayName: string;
58
54
  url: string;
@@ -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
- id: string;
48
- namespace: string;
49
- name: string;
50
- webUrl: string;
51
- httpsUrl: string | null;
52
- sshUrl: string | null;
53
- defaultBranch: {
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 { Account, CursorPageInput, EnterpriseOptions, GetRepoInput, GitProvider, GitPullRequest, GitRepository } from '../gitProvider';
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;
@@ -26,6 +26,7 @@ export interface Issue {
26
26
  } | null;
27
27
  state: string | null;
28
28
  title: string;
29
+ type: string | null;
29
30
  updatedDate: Date | null;
30
31
  upvoteCount: number | null;
31
32
  url: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitkraken/provider-apis",
3
- "version": "0.8.1",
3
+ "version": "0.8.3",
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",