@gitkraken/provider-apis 0.50.0 → 0.51.0

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.
@@ -1,4 +1,4 @@
1
- "use strict";var ut=Object.defineProperty;var gs=Object.getOwnPropertyDescriptor;var hs=Object.getOwnPropertyNames;var fs=Object.prototype.hasOwnProperty;var Rs=(r,n)=>{for(var e in n)ut(r,e,{get:n[e],enumerable:!0})},Is=(r,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of hs(n))!fs.call(r,s)&&s!==e&&ut(r,s,{get:()=>n[s],enumerable:!(t=gs(n,s))||t.enumerable});return r};var bs=r=>Is(ut({},"__esModule",{value:!0}),r);var uo={};Rs(uo,{AzureDevOps:()=>de,Bitbucket:()=>ce,BitbucketServer:()=>me,EntityIdentifierProviderType:()=>us,EntityType:()=>as,EntityVersion:()=>is,GitBuildStatusStage:()=>Xt,GitBuildStatusState:()=>Le,GitDiffLineType:()=>lt,GitHub:()=>ge,GitHubIssueCloseReason:()=>ls,GitIssueState:()=>ie,GitLab:()=>fe,GitMergeStrategy:()=>pe,GitPullRequestMergeableState:()=>oe,GitPullRequestReviewState:()=>Y,GitPullRequestState:()=>Z,GraphQLErrors:()=>I,Jira:()=>Re,JiraServer:()=>Ie,PullRequestAsyncStatus:()=>os,Trello:()=>be,default:()=>ao,isFetch:()=>Ue});module.exports=bs(uo);var ur=require("diff");var Xt=(s=>(s.Build="build",s.Production="production",s.Staging="staging",s.Test="test",s))(Xt||{}),Le=(p=>(p.ActionRequired="ACTION_REQUIRED",p.Cancelled="CANCELLED",p.Error="ERROR",p.Failed="FAILED",p.Pending="PENDING",p.Running="RUNNING",p.Skipped="SKIPPED",p.Success="SUCCESS",p.Warning="WARNING",p.OptionalActionRequired="OPTIONAL_ACTION_REQUIRED",p))(Le||{}),pe=(o=>(o.MergeCommit="MERGE_COMMIT",o.Rebase="REBASE",o.RebaseThenMergeCommit="REBASE_THEN_MERGE_COMMIT",o.FastForward="FAST_FORWARD",o.Squash="SQUASH",o))(pe||{}),Z=(t=>(t.Open="OPEN",t.Closed="CLOSED",t.Merged="MERGED",t))(Z||{}),Y=(s=>(s.Approved="APPROVED",s.ChangesRequested="CHANGES_REQUESTED",s.Commented="COMMENTED",s.ReviewRequested="REVIEW_REQUESTED",s))(Y||{}),oe=(u=>(u.Behind="BEHIND",u.Blocked="BLOCKED",u.Conflicts="CONFLICTS",u.FailingChecks="FAILING_CHECKS",u.Mergeable="MERGEABLE",u.Unknown="UNKNOWN",u.UnknownAndBlocked="UNKNOWN_AND_BLOCKED",u.Unstable="UNSTABLE",u))(oe||{}),lt=(t=>(t.ADDED="ADDED",t.DELETED="DELETED",t.UNMODIFIED="UNMODIFIED",t))(lt||{});var Zt={APPROVED:0,COMMENTED:1,REVIEW_REQUESTED:2,CHANGES_REQUESTED:3},B=r=>!r||r.length===0?null:r.reduce((n,e)=>Zt[e.state]>Zt[n]?e.state:n,"APPROVED");var R=(r,n)=>{let e={};return r&&(e.Authorization=`${n?"Basic":"Bearer"} ${r}`),e},Yt=r=>r?r.reduce((n,e)=>(n[e]=!0,n),{}):void 0,ee=(r,n,e)=>!r||n.some(t=>r[t])?e:"",er=async r=>{let n=[],e=!0,t;for(;e;){let s=await r(t);n=n.concat(s.data),e=!!s?.pageInfo?.hasNextPage,t=s?.pageInfo?.endCursor||s?.pageInfo?.nextPage}return n};async function pt(r){return(await Promise.allSettled(r)).map(e=>ys(e)).filter(e=>e!=null)}var U=(r,{fallback:n,max:e})=>!r||r<=0?n:e===void 0?r:Math.min(r,e),k=(r,n)=>{if(!n||n.length===0)return r;let e=new Set(n);return r.filter(t=>e.has(t.state))};function ys(r,n=void 0){return r?.status==="fulfilled"?r.value:n}async function tr(r,n,e){if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw new Error("batchSize must be a positive integer");for(let t=0;t<r.length;t+=n){let s=r.slice(t,t+n);await Promise.all(s.map(e))}}var ie=(e=>(e.Open="OPEN",e.Closed="CLOSED",e))(ie||{});var dt=(a=>(a[a.Unknown=0]="Unknown",a[a.Active=1]="Active",a[a.Fixed=2]="Fixed",a[a.WontFix=3]="WontFix",a[a.Closed=4]="Closed",a[a.ByDesign=5]="ByDesign",a[a.Pending=6]="Pending",a))(dt||{});var L=100;var rr=globalThis.fetch;var Ps=async r=>{let n=r.headers.get("content-type")||"",e=null;if(n.startsWith("application/json")){let o=await r.text();e=o.trim().length>0?JSON.parse(o):null}else if(n.startsWith("text/")||n===""||n.startsWith("application/vnd.github.diff")||n.startsWith("application/vnd.github.patch"))e=await r.text();else if(n.startsWith("application/vnd.github.raw+json")||n.startsWith("application/octet-stream"))e=await r.arrayBuffer();else throw new Error(`Unsupported content-type: ${n}`);let t={};r.headers.forEach((o,i)=>{t[i]=o});let s={body:e,headers:t,status:r.status,statusText:r.statusText};if(!r.ok){let o=new Error(r.statusText);throw Object.assign(o,{response:s}),o}return s},ct=r=>async({url:n,...e})=>{let t=await r(n,e);return Ps(t)};var Ue=(r,n=!1)=>r.name==="fetch"||n;var j=class{constructor(n){let e=n?.request||rr;this.config={...n,request:Ue(e,n?.forceIsFetch)?ct(e):e}}updateConfig(n){this.config={...this.config,...n,request:n.request&&Ue(n.request,n?.forceIsFetch??this.config.forceIsFetch)?ct(n.request):this.config.request}}},N=class extends j{};var ws="https://app.vssps.visualstudio.com/_apis",qs="https://vssps.dev.azure.com/",Ss="https://dev.azure.com",q=(r,n={})=>R(n.token||r.token,n.isPAT||r.isPAT),sr=r=>r.url.replace("/_apis/git/repositories/","/_git/").replace(`/${r.repository.project.id}/`,`/${encodeURIComponent(r.repository.project.name)}/`).replace(`/${r.repository.id}/`,`/${encodeURIComponent(r.repository.name)}/`).replace("/pullRequests/","/pullrequest/"),mt=(r,n)=>{let e=n.baseUrl||r.baseUrl||ws;return e=e.replace(/\/$/,""),e},C=(r,n)=>{let e=n.baseUrl||r.baseUrl||Ss;return e=e.replace(/\/$/,""),e},gt=(r,n)=>{let e=n.baseUrl||r.baseUrl||qs;return e=e.replace(/\/$/,""),e};var vs={active:"OPEN",completed:"MERGED",abandoned:"CLOSED"},Es={OPEN:"active",MERGED:"completed",CLOSED:"abandoned"},Ae=100,Cs=200,$s=200,nr=r=>{if(!r||r.length===0)return"active";let n=Array.from(new Set(r.map(e=>Es[e])));return n.length===1?n[0]:"all"},Ds=r=>{if(!r||r.length===0)return["[Microsoft.VSTS.Common.ClosedDate] = ''","[Microsoft.VSTS.Common.ResolvedDate] = ''"];let n=new Set(r),e=n.has("OPEN"),t=n.has("CLOSED");return e&&t?[]:t?["([Microsoft.VSTS.Common.ClosedDate] <> '' OR [Microsoft.VSTS.Common.ResolvedDate] <> '')"]:["[Microsoft.VSTS.Common.ClosedDate] = ''","[Microsoft.VSTS.Common.ResolvedDate] = ''"]},Ls=r=>{if(typeof r!="string")return r;let n=r.charAt(0).toUpperCase()+r.slice(1);return dt[n]??0},Us=new Set([2,3,4,5]),As={10:"APPROVED",5:"APPROVED",0:"REVIEW_REQUESTED",[-5]:"CHANGES_REQUESTED",[-10]:"CHANGES_REQUESTED"},ae=r=>({id:r.id,name:r.displayName??null,username:(r.uniqueName||r.displayName)??null,email:null,avatarUrl:r.imageUrl??null,url:null}),Ge=r=>r.startsWith("refs/heads/")?r.replace("refs/heads/",""):r,Gs=r=>{switch(r){case"conflicts":return"CONFLICTS";case"failure":return"FAILING_CHECKS";case"rejectedByPolicy":return"BLOCKED";case"succeeded":return"MERGEABLE";case"notSet":case"queued":default:return"UNKNOWN"}},ht=(r,n,e,t,s,o)=>`${r}|${n}|${e}|${t}|${s}|${o}`,or=r=>{let n=r.split("|");if(n.length!==6)throw new Error("Invalid Azure comment ID format");return{namespace:n[0],project:n[1],repoName:n[2],prId:n[3],threadId:n[4],commentId:n[5]}},ir=(r,n,e,t,s)=>`${r}|${n}|${e}|${t}|${s}`,ft=r=>{let n=r.split("|");if(n.length!==5)throw new Error("Invalid Azure thread ID format");return{namespace:n[0],project:n[1],repoName:n[2],prId:n[3],threadId:n[4]}},Pe=(r,n,e)=>{let t=!!n.forkSource,s=[],o=[];return n.reviewers.forEach(i=>{let a={reviewer:ae(i),state:As[i.vote??0]||"REVIEW_REQUESTED"};i.isRequired&&s.push(a),o.push(a)}),{id:n.pullRequestId.toString(),title:n.title,description:n.description??null,number:n.codeReviewId,state:vs[n.status],isDraft:n.isDraft,commentCount:null,upvoteCount:null,author:ae(n.createdBy),createdDate:new Date(n.creationDate),updatedDate:new Date(n.closedDate||n.creationDate),closedDate:n.closedDate?new Date(n.closedDate):null,mergedDate:n.closedDate&&n.status==="completed"?new Date(n.closedDate):null,isCrossRepository:t,repository:{id:n.repository.id,name:n.repository.name,project:n.repository.project.name,owner:{login:r},remoteInfo:e?.get(n.repository.id)??null},headCommit:{buildStatuses:null},baseRef:{name:Ge(n.targetRefName),oid:n.lastMergeTargetCommit.commitId},headRef:{name:Ge(n.sourceRefName),oid:n.lastMergeSourceCommit.commitId},url:sr(n),assignees:n.reviewers.map(ae),reviews:o,reviewDecision:B(s),additions:null,deletions:null,fileCount:null,commitCount:null,headRepository:n.forkSource?{id:n.forkSource.repository.id,name:n.forkSource.repository.name,project:void 0,owner:{login:r},remoteInfo:e?.get(n.forkSource.repository.id)??null,isFork:!0}:{id:n.repository.id,name:n.repository.name,project:n.repository.project.name,owner:{login:r},remoteInfo:e?.get(n.repository.id)??null,isFork:!1},mergeableState:Gs(n.mergeStatus),labels:n.labels?.map(i=>({color:null,description:null,id:i.id,name:i.name}))??[],permissions:null}},ar=(r,n)=>({id:n.id,name:n.name,namespace:r,project:n.project.name,projectId:n.project.id,webUrl:n.webUrl,httpsUrl:n.remoteUrl,sshUrl:n.sshUrl,defaultBranch:n.defaultBranch?{name:Ge(n.defaultBranch)}:null,permissions:null}),Ts=(r,n,e,t)=>{let s=e.fields,o=s["System.AssignedTo"],i=s["System.State"],a=s["System.WorkItemType"],u;return i&&a&&(u=t[a]?.[i]),{id:e.id.toString(),number:e.id.toString(),title:s["System.Title"],commentCount:s["System.CommentCount"],author:{avatarUrl:s["System.CreatedBy"]._links?.avatar?.href??null,email:null,id:s["System.CreatedBy"].id,name:s["System.CreatedBy"].uniqueName??null,username:s["System.CreatedBy"].displayName??null,url:null},closedDate:s["Microsoft.VSTS.Common.ClosedDate"]?new Date(s["Microsoft.VSTS.Common.ClosedDate"]):null,createdDate:new Date(s["System.CreatedDate"]),updatedDate:new Date(s["System.ChangedDate"]),url:e._links.html.href,assignees:o?[{avatarUrl:o._links?.avatar?.href??null,email:null,id:o.id,name:o.uniqueName??null,username:o.displayName??null,url:null}]:[],description:s["System.Description"]??null,state:{name:u?.title||i,color:null},type:s["System.WorkItemType"],repository:null,project:{namespace:r,name:n,resourceId:null,key:null,id:null},upvoteCount:0,labels:e.fields["System.Tags"]?.split(";").map(l=>({color:null,description:null,id:null,name:l.trim()}))??[]}},de=class extends N{constructor(){super(...arguments);this.cachedUserIds=new Map;this.inflightUserIds=new Map}getCurrentUserId(e,t){let s=JSON.stringify([e,t.token??null,t.isPAT??this.config.isPAT??!1,t.baseUrl??null]),o=this.cachedUserIds.get(s);if(o)return Promise.resolve(o);let i=this.inflightUserIds.get(s);if(i)return i;let a=this.fetchCurrentUserId(e,t,s);return this.inflightUserIds.set(s,a),a}async fetchCurrentUserId(e,t,s){try{let o=await this.getCurrentUserForInstance({namespace:e},t);return this.cachedUserIds.set(s,o.data.id),o.data.id}finally{this.inflightUserIds.delete(s)}}getRepoApiUrl(e,t,s,o){return`${C(this.config,o)}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/_apis/git/repositories/${encodeURIComponent(s)}`}async getCurrentUser(e={},t={}){if(t.isPAT||this.config.isPAT)throw new Error("Azure DevOps does not support PATs for this function.");let s=`${mt(this.config,t)}/profile/profiles/me`,o=await this.config.request({url:s,headers:q(this.config,t)});return{data:{id:o.body.id,name:o.body.displayName,username:o.body.displayName,email:o.body.emailAddress,avatarUrl:null,url:null}}}async getCurrentUserForInstance(e,t={}){let o=(await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/_apis/ConnectionData`,headers:q(this.config,t)})).body.authorizedUser;if(o.providerDisplayName==="Anonymous")throw new Error("Current user not found.");return{data:{id:o.id,name:o.providerDisplayName,username:o.providerDisplayName,email:o.properties.Account.$value,avatarUrl:null,url:null}}}async getUserForCommit(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let o=(await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.repo.namespace)}/${encodeURIComponent(e.repo.project)}/_apis/git/repositories/${encodeURIComponent(e.repo.name)}/commits/${e.oid}`,headers:q(this.config,t)})).body.author;return{data:{name:o.name,email:o.email,avatarUrl:o.imageUrl}}}async getOrgsForUser(e,t={}){let s=`${mt(this.config,t)}/accounts?memberId=${e.userId}&api-version=6.0`;return{data:(await this.config.request({url:s,headers:q(this.config,t)})).body.value.map(i=>({id:i.accountId,name:i.accountName}))}}async getCollectionsForUser(e,t={}){let s=`${C(this.config,t)}/_apis/projectCollections`;return{data:(await this.config.request({url:s,headers:q(this.config,t)})).body.value.map(i=>({id:i.id,name:i.name}))}}async getAzureProjects(e,t={}){let s=new URL(`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/_apis/projects`);s.searchParams.set("$top",L.toString()),e.cursor&&s.searchParams.set("$skip",e.cursor);let o=await this.config.request({url:s.toString(),headers:q(this.config,t)}),i=o.headers["x-ms-continuationtoken"];return{pageInfo:{hasNextPage:!!i,endCursor:i||null},data:o.body.value.map(a=>({id:a.id,name:a.name,namespace:e.namespace}))}}async getAzureProjectScopeDescriptor(e,t={}){let{namespace:s,projectId:o}=e;return{data:{scope:(await this.config.request({url:`${gt(this.config,t)}/${encodeURIComponent(s)}/_apis/graph/descriptors/${o}?api-version=6.0`,headers:q(this.config,t)})).body.value}}}async getAzureGraphAccountsForAzureProject(e,t={}){let{namespace:s,projectScopeDescriptor:o,cursor:i}=e,a=new URL(`${gt(this.config,t)}/${encodeURIComponent(s)}/_apis/graph/users`);o&&a.searchParams.set("scopeDescriptor",o),i&&a.searchParams.set("continuationToken",i);let u=await this.config.request({url:a.toString(),headers:q(this.config,t)}),l=u.headers["x-ms-continuationtoken"];return{pageInfo:{endCursor:l||null,hasNextPage:!!l},data:u.body.value.map(p=>({avatarUrl:p._links?.avatar?.href??null,descriptor:p.descriptor??null,email:p.mailAddress??null,name:p.displayName??null,storageKeyURL:p._links?.storageKey?.href??null,username:p.displayName??null}))}}async getAccountFromAzureGraphAccount(e,t={}){let{azureGraphAccount:s}=e;if(!s.storageKeyURL)throw new Error("Expected 'storageKeyURL' to not be null for 'azureGraphAccount'");let o=await this.config.request({url:s.storageKeyURL,headers:q(this.config,t)});return{data:{avatarUrl:s.avatarUrl,email:s.email,id:o.body.value,name:s.name,username:s.username,url:null}}}async getAccountsFromAzureGraphAccounts(e,t={}){let s=[];for(let o of e.azureGraphAccounts){let i=await this.getAccountFromAzureGraphAccount({azureGraphAccount:o},t);s.push(i.data)}return{data:s}}async getRepo(e,t={}){if(!e.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/${encodeURIComponent(e.project)}/_apis/git/repositories/${encodeURIComponent(e.name)}`,headers:q(this.config,t)});return{data:ar(e.namespace,s.body)}}async getRepos(e,t={}){let s=[],o=[];return await Promise.all(e.map(async i=>{try{let a=await this.getRepo(i,t);s.push(a.data)}catch(a){o.push({input:i,error:a})}})),{data:s,errors:o}}async getReposForAzureProject(e,t={}){if(!e.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');return{data:(await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/${encodeURIComponent(e.project)}/_apis/git/repositories`,headers:q(this.config,t)})).body.value.map(o=>ar(e.namespace,o))}}async getRefs(e,t,s={}){if(!t.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let o=new URL(`${C(this.config,s)}/${encodeURIComponent(t.repo.namespace)}/${encodeURIComponent(t.repo.project)}/_apis/git/repositories/${encodeURIComponent(t.repo.name)}/refs`);o.searchParams.set("filter",e),o.searchParams.set("$top",L.toString()),t.cursor&&o.searchParams.set("continuationToken",t.cursor);let i=await this.config.request({url:o.toString(),headers:q(this.config,s)}),a=i.headers["x-ms-continuationtoken"];return{pageInfo:{hasNextPage:!!a,endCursor:a||null},data:i.body.value.map(u=>({name:Ge(u.name),commit:{oid:u.objectId,authoredDate:null,committedDate:null}}))}}async getBranches(e,t={}){return this.getRefs("heads",e,t)}async getTags(e,t={}){return this.getRefs("tags",e,t)}async fetchRemoteInfoByRepoId(e,t,s){let o=new Map;if(!e)return o;let i=new Map;for(let{namespace:a,pullRequests:u}of t)for(let l of u)i.has(l.repository.id)||i.set(l.repository.id,a),l.forkSource&&!i.has(l.forkSource.repository.id)&&i.set(l.forkSource.repository.id,a);return await tr([...i],10,async([a,u])=>{try{let l=await this.config.request({url:`${C(this.config,s)}/${encodeURIComponent(u)}/_apis/git/repositories/${encodeURIComponent(a)}`,headers:q(this.config,s)}),{remoteUrl:p,sshUrl:d}=l.body;p&&d&&o.set(a,{cloneUrlHTTPS:p,cloneUrlSSH:d})}catch{}}),o}async getPullRequestsForRepoBase(e,t={},s=Ae){let{page:o,repo:i,assigneeLogins:a,authorLogin:u,reviewerId:l}=e||{},p=o||1;if(!i.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let d=U(e.pageSize,{fallback:s}),c=l??(a&&a.length?a[0]:void 0),g=`searchCriteria.status=${nr(e.states)}`;return c&&(g+=`&searchCriteria.reviewerId=${encodeURIComponent(c)}`),u&&(g+=`&searchCriteria.creatorId=${encodeURIComponent(u)}`),await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(i.namespace)}/${encodeURIComponent(i.project||"")}/_apis/git/repositories/${encodeURIComponent(i.name)}/pullRequests?${g}&%24top=${d}&%24skip=${(p-1)*d}`,headers:q(this.config,t)})}async getPullRequestsForRepo(e,t={}){let s=U(e.pageSize,{fallback:Ae}),o=e.page||1,i=await this.getPullRequestsForRepoBase(e,t,s),a=i.body.value.length===s,u=await this.fetchRemoteInfoByRepoId(e.includeRemoteInfo,[{namespace:e.repo.namespace,pullRequests:i.body.value}],t);return{pageInfo:{hasNextPage:a,nextPage:a?o+1:null,currentPage:o},data:k(i.body.value.map(l=>Pe(e.repo.namespace,l,u)),e.states)}}async getPullRequestsForRepos(e,t={}){if(!e.repos.every(u=>u.project))throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{repos:s}=e||{},o=[];await Promise.all(s.map(async u=>{try{let l=await this.getPullRequestsForRepoBase({repo:u,...e},t);o.push({namespace:u.namespace,pullRequests:l.body.value})}catch(l){if(l.statusCode!==404&&l.statusCode!==401)throw l}}));let i=await this.fetchRemoteInfoByRepoId(e.includeRemoteInfo,o,t),a=o.flatMap(({namespace:u,pullRequests:l})=>l.map(p=>Pe(u,p,i)));return{data:k(a,e.states)}}async getPullRequestsForProjectBase(e,t={},s=Ae){let{namespace:o,project:i,page:a,assigneeLogins:u,authorLogin:l,reviewerId:p,repo:d}=e;if(d?.project&&d.project!==i)throw new Error("Could not fetch pull requests, project mismatch");let c=a||1,g=U(e.pageSize,{fallback:s}),m=p??(u&&u.length?u[0]:void 0),h=new URL(`${C(this.config,t)}/${encodeURIComponent(o)}/${encodeURIComponent(i)}/_apis/git/pullRequests`);return h.searchParams.set("searchCriteria.status",nr(e.states)),h.searchParams.set("$top",g.toString()),h.searchParams.set("$skip",((c-1)*g).toString()),d?.id&&d?.project===i&&h.searchParams.set("searchCriteria.repositoryId",d.id),m&&h.searchParams.set("searchCriteria.reviewerId",m),l&&h.searchParams.set("searchCriteria.creatorId",l),await this.config.request({url:h.toString(),headers:q(this.config,t)})}async getPullRequestsForProject(e,t={}){let s=U(e.pageSize,{fallback:Ae}),o=e.page||1,i=await this.getPullRequestsForProjectBase(e,t,s),a=i.body.value.length===s,u=await this.fetchRemoteInfoByRepoId(e.includeRemoteInfo,i?[{namespace:e.namespace,pullRequests:i.body.value}]:[],t);return{pageInfo:{hasNextPage:a,nextPage:a?o+1:null,currentPage:o},data:k(i?.body.value.map(l=>Pe(e.namespace,l,u))||[],e.states)}}async getPullRequestsForProjects(e,t={}){let{projects:s}=e||{},o=[];await Promise.all(s.map(async u=>{try{if(!e.repo||e.repo.project&&e.repo.project===u.project){let l=await this.getPullRequestsForProjectBase({...u,...e},t);l&&o.push({namespace:u.namespace,pullRequests:l.body.value})}}catch(l){if(l.statusCode!==404&&l.statusCode!==401)throw l}}));let i=await this.fetchRemoteInfoByRepoId(e.includeRemoteInfo,o,t),a=o.flatMap(({namespace:u,pullRequests:l})=>l.map(p=>Pe(u,p,i)));return{data:k(a,e.states)}}async getAzurePullRequestLastMergeStatus(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{repo:{namespace:s,project:o,name:i},pullRequestId:a}=e,u=await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(s)}/${encodeURIComponent(o||"")}/_apis/git/repositories/${i}/pullrequests/${a}?includeCommits=true?api-version=6.0`,headers:{...q(this.config,t)}});if(!u.body.mergeStatus)throw new Error("Could not fetch pull request");return{data:u.body.mergeStatus}}async updatePullRequest(e,t,s){return await this.config.request({method:"PATCH",url:`${C(this.config,s)}/${encodeURIComponent(e.repository.owner.login)}/${encodeURIComponent(e.repository.project)}/_apis/git/repositories/${e.repository.name}/pullrequests/${e.id}?api-version=6.0`,body:t,headers:{...q(this.config,s),"Content-Type":"application/json"}})}async closePullRequest(e,t={}){let{pullRequest:s}=e,o={status:"abandoned"};if(!(await this.updatePullRequest(s,JSON.stringify(o),t)).body.status)throw new Error("Could not close pull request")}async mergePullRequest(e,t={}){let{pullRequest:s,mergeStrategy:o}=e,i;switch(o){case"MERGE_COMMIT":{i="noFastForward";break}case"REBASE":{i="rebase";break}case"REBASE_THEN_MERGE_COMMIT":{i="rebaseMerge";break}case"SQUASH":{i="squash";break}}let a={completionOptions:{mergeStrategy:i},lastMergeSourceCommit:{commitId:s.headRef?.oid},status:"completed"};if(!(await this.updatePullRequest(s,JSON.stringify(a),t)).body.status)throw new Error("Could not merge pull request")}async addPullRequestLabel(e,t={}){let{pullRequest:s,label:o}=e;if(!s.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let i={name:o.name};if(!(await this.config.request({method:"POST",url:`${C(this.config,t)}/${encodeURIComponent(s.repository.owner.login)}/${encodeURIComponent(s.repository.project)}/_apis/git/repositories/${s.repository.name}/pullrequests/${s.id}/labels?api-version=6.0`,body:JSON.stringify(i),headers:{...q(this.config,t),"Content-Type":"application/json"}})).body.id)throw new Error("Could not add pull request label")}async removePullRequestLabel(e,t={}){let{pullRequest:s,label:o}=e;if(!s.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');await this.config.request({method:"DELETE",url:`${C(this.config,t)}/${encodeURIComponent(s.repository.owner.login)}/${encodeURIComponent(s.repository.project)}/_apis/git/repositories/${s.repository.name}/pullrequests/${s.id}/labels/${encodeURIComponent(o.name)}?api-version=6.0`,headers:{...q(this.config,t)}})}async setPullRequestLabels(e,t={}){let{pullRequest:s,labels:o}=e;if(!s.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let i=s.labels;if(!i)throw new Error('Azure DevOps requires "labels" for this function.');for(let a of o)i.find(u=>u.id===a.id)||await this.addPullRequestLabel({pullRequest:s,label:a},t);for(let a of i)o.find(u=>a.id===u.id)||await this.removePullRequestLabel({pullRequest:s,label:a},t)}async setPullRequestAsDraft(e,t={}){let{pullRequest:s,isDraft:o}=e,i={isDraft:o};if(!(await this.updatePullRequest(s,JSON.stringify(i),t)).body.status)throw new Error("Could not set the pull request as draft")}async addPullRequestReviewer(e,t={}){let{pullRequest:s,reviewer:o,isRequired:i}=e,a={id:o.id,isRequired:i};if(!(await this.config.request({method:"PUT",url:`${C(this.config,t)}/${encodeURIComponent(s.repository.owner.login)}/${encodeURIComponent(s.repository.project)}/_apis/git/repositories/${s.repository.name}/pullrequests/${s.id}/reviewers/${o.id}?api-version=6.0`,body:JSON.stringify(a),headers:{...q(this.config,t),"Content-Type":"application/json"}})).body.id)throw new Error("Could not add pull request reviewer")}async removePullRequestReviewer(e,t={}){let{pullRequest:s,reviewer:o}=e;await this.config.request({method:"DELETE",url:`${C(this.config,t)}/${encodeURIComponent(s.repository.owner.login)}/${encodeURIComponent(s.repository.project)}/_apis/git/repositories/${s.repository.name}/pullrequests/${s.id}/reviewers/${o.id}?api-version=6.0`,headers:{...q(this.config,t),Accept:"application/json"}})}async setPullRequestReviewers(e,t={}){let{pullRequest:s,reviewers:o}=e;for(let i of o)s.assignees.find(a=>a.id===i.id)||await this.addPullRequestReviewer({pullRequest:s,reviewer:i,isRequired:!0},t);for(let i of s.assignees)o.find(a=>i.id===a.id)||await this.removePullRequestReviewer({pullRequest:s,reviewer:i},t)}async getIssuesForAzureProject(e,t={}){let{page:s,assigneeLogins:o,authorLogin:i,mentionLogin:a,labelNames:u,statusByWorkItemIdByStatusId:l}=e||{},p=s||1,d=Math.min(U(e.pageSize,{fallback:Cs}),$s),c=["[System.TeamProject] = @project",...Ds(e.states)];i&&c.push(`[System.CreatedBy] = '${i.replace("'","''")}'`),o&&o[0]&&c.push(`[System.AssignedTo] = '${o[0].replace("'","''")}'`),a&&c.push("[System.Id] IN (@recentMentions)"),u&&u.forEach(D=>c.push(`[System.Tags] Contains '${D}'`));let g=`Select [Microsoft.VSTS.Common.ClosedDate], [Microsoft.VSTS.Common.ResolvedDate] From WorkItems Where ${c.join(" AND ")} order by [System.CreatedDate] desc`,m=await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/${encodeURIComponent(e.project)}/_apis/wit/wiql?api-version=6.0`,body:JSON.stringify({query:g}),method:"POST",headers:{...q(this.config,t),"Content-Type":"application/json"}}),h=m.body.workItems.slice((p-1)*d,d*p).map(D=>D.id),y=m.body.workItems.length,f=Math.ceil(y/d),P=y>d*p;if(h.length===0)return{pageInfo:{hasNextPage:!1,nextPage:null,currentPage:p,totalCount:y,totalPages:f},data:[]};let S=await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/${encodeURIComponent(e.project)}/_apis/wit/workitemsbatch?api-version=6.0`,body:JSON.stringify({ids:h,$expand:"Links"}),method:"POST",headers:{...q(this.config,t),"Content-Type":"application/json"}});return{pageInfo:{hasNextPage:P,nextPage:P?p+1:null,currentPage:p,totalCount:y,totalPages:f},data:S.body.value.map(D=>Ts(e.namespace,e.project,D,l||{}))}}async getPermissionsForRepos(e,t={}){let{namespace:s,repos:o}=e,i={4:["canPush","canCreateWebhook"],1024:["isAdmin"],2048:["isAdmin"],4096:["isAdmin"],8192:["isAdmin"]},a=d=>{let c="2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87",g=`repoV2/${d.projectId}/${d.id}`;return Object.keys(i).map(m=>({securityNamespaceId:c,token:g,permissions:m}))},u={alwaysAllowAdministrators:!1,evaluations:o.flatMap(a)};return{data:(await this.config.request({method:"POST",url:`${C(this.config,t)}/${encodeURIComponent(s)}/_apis/security/permissionevaluationbatch?api-version=7.0`,body:JSON.stringify(u),headers:{...q(this.config,t),"Content-Type":"application/json"}})).body.evaluations.reduce((d,c)=>{let[,g,m]=c.token.split("/"),h=`${g}/${m}`,y=i[c.permissions];for(let f of y)d[h]===void 0&&(d[h]={canCreateWebhook:!0,canPush:!0,isAdmin:!0}),c.value===!1&&(d[h][f]=!1);return d},{})}}async decorateReposWithPermissions(e,t={}){let{namespace:s,repos:o}=e,i=await this.getPermissionsForRepos({namespace:s,repos:o},t);return{data:o.map(a=>({...a,permissions:i.data[`${a.projectId}/${a.id}`]}))}}async updateIssue(e,t,s={}){return await this.config.request({method:"PATCH",url:`${C(this.config,s)}/${encodeURIComponent(e.project.namespace)}/${encodeURIComponent(e.project.name)}/_apis/wit/workitems/${e.id}?api-version=6.0`,body:JSON.stringify(t),headers:{...q(this.config,s),"Content-Type":"application/json-patch+json"}})}async setIssueStatus(e,t={}){let{issue:s,status:o}=e,i=[{op:"add",path:"/fields/System.State",value:o.name}];if(!(await this.updateIssue(s,i,t)).body.fields?.["System.State"])throw new Error("Could not set issue status")}async setIssueAssignee(e,t={}){let{issue:s,assignee:o}=e,i=[{op:"add",path:"/fields/System.AssignedTo",value:o?.name??""}];if(!(await this.updateIssue(s,i,t)).body.fields?.["System.State"])throw new Error("Could not set issue assignee")}async setIssueLabels(e,t={}){let{issue:s,labels:o}=e,a=[{op:"replace",path:"/fields/System.Tags",value:o.map(l=>l.name).join(";")}];if(!(await this.updateIssue(s,a,t)).body.fields?.["System.Tags"])throw new Error("Could not set issue tags")}async getIssueTypesForAzureProject(e,t={}){if(!e.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{namespace:s,project:o}=e;return{data:(await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(s)}/${encodeURIComponent(o||"")}/_apis/wit/workitemtypes?api-version=6.0`,headers:{...q(this.config,t)}})).body.value}}async getLabelsForProject(e,t={}){let{namespace:s,project:o}=e;return{data:(await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(s)}/${encodeURIComponent(o||"")}/_apis/wit/tags?api-version=6.0`,headers:{...q(this.config,t)}})).body.value.map(a=>({color:null,description:null,id:a.id,name:a.name,url:a.url}))}}async getPullRequestForRepo(e,t={}){let{repo:s,number:o}=e;if(!s.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let i=await this.config.request({url:`${this.getRepoApiUrl(s.namespace,s.project,s.name,t)}/pullrequests/${o}?api-version=7.1`,headers:q(this.config,t)}),a=await this.fetchRemoteInfoByRepoId(e.includeRemoteInfo,[{namespace:s.namespace,pullRequests:[i.body]}],t);return{data:Pe(s.namespace,i.body,a)}}async getPullRequestDescription(e,t={}){let{repo:s,number:o}=e;if(!s.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');try{return{data:{description:(await this.config.request({url:`${this.getRepoApiUrl(s.namespace,s.project,s.name,t)}/pullrequests/${o}?api-version=7.1`,headers:q(this.config,t)})).body?.description??""}}}catch{return{data:{description:null}}}}async setPullRequestDescription(e,t={}){let{repo:s,number:o,description:i}=e;if(!s.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');return{data:{description:(await this.config.request({method:"PATCH",url:`${this.getRepoApiUrl(s.namespace,s.project,s.name,t)}/pullrequests/${o}?api-version=7.1`,headers:{...q(this.config,t),"Content-Type":"application/json"},body:JSON.stringify({description:i})})).body?.description??i}}}async getMergeBase(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=await this.config.request({url:`${this.getRepoApiUrl(e.repo.namespace,e.repo.project,e.repo.name,t)}/commits/${encodeURIComponent(e.base)}/mergebases?otherCommitId=${encodeURIComponent(e.head)}&api-version=7.1`,headers:q(this.config,t)});if(!s.body.value?.length)throw new Error("No merge base found between the specified commits.");return{data:s.body.value[0].commitId}}async getFileContents(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=await this.config.request({url:`${this.getRepoApiUrl(e.repo.namespace,e.repo.project,e.repo.name,t)}/items?path=${encodeURIComponent(e.path)}&versionDescriptor[version]=${encodeURIComponent(e.ref)}&versionDescriptor[versionType]=commit&api-version=7.1`,headers:{...q(this.config,t),Accept:"application/octet-stream"}});return{data:new Blob([s.body])}}async getPullRequestDiff(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=this.getRepoApiUrl(e.repo.namespace,e.repo.project,e.repo.name,t),o=q(this.config,t),i={...o,Accept:"application/octet-stream"},[a,u]=await Promise.all([this.config.request({url:`${s}/pullrequests/${e.pullRequestId}?api-version=7.1`,headers:o}),this.config.request({url:`${s}/pullrequests/${e.pullRequestId}/iterations?api-version=7.1`,headers:o})]),l=a.body.lastMergeTargetCommit.commitId,p=a.body.lastMergeSourceCommit.commitId,d=u.body.value;if(d.length===0)return"";let c=d[d.length-1],g=1e3,m=[],h=0;for(;;){let E=(await this.config.request({url:`${s}/pullrequests/${e.pullRequestId}/iterations/${c.id}/changes?api-version=7.1&$top=${g}&$skip=${h}`,headers:o})).body.changeEntries??[];if(E.length===0||(m.push(...E),E.length<g))break;h+=E.length}if(m.length===0)return"";let y=5,f=[],P=new TextDecoder,S=w=>w instanceof ArrayBuffer?P.decode(w):typeof w=="string"?w:"",D=async(w,E)=>{try{let se=await this.config.request({url:`${s}/items?path=${encodeURIComponent(w)}&versionDescriptor[version]=${encodeURIComponent(E)}&versionDescriptor[versionType]=commit&includeContent=true&api-version=7.1`,headers:i});return S(se.body)}catch{return""}},$=w=>{if(typeof w=="number")return{add:(w&1)!==0,rename:(w&8)!==0,delete:(w&16)!==0};let E=w.toLowerCase().split(",").map(se=>se.trim());return{add:E.includes("add"),rename:E.includes("rename"),delete:E.includes("delete")}};for(let w=0;w<m.length;w+=y){let E=m.slice(w,w+y),se=await Promise.all(E.map(async ue=>{let{add:le,rename:at,delete:ne}=$(ue.changeType),ye=ue.originalPath??ue.item.originalPath,T=ue.item.path,De=ne?T??ye??"":T??"",Kt=at||ne?ye??De:De,[ps,ds]=await Promise.all([le?Promise.resolve(""):D(Kt,l),ne?Promise.resolve(""):D(De,p)]),cs=le?"/dev/null":`a${Kt}`,ms=ne?"/dev/null":`b${De}`;return(0,ur.createTwoFilesPatch)(cs,ms,ps,ds)}));f.push(...se)}return f.join(`
1
+ "use strict";var ut=Object.defineProperty;var gs=Object.getOwnPropertyDescriptor;var hs=Object.getOwnPropertyNames;var fs=Object.prototype.hasOwnProperty;var Rs=(r,n)=>{for(var e in n)ut(r,e,{get:n[e],enumerable:!0})},Is=(r,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of hs(n))!fs.call(r,s)&&s!==e&&ut(r,s,{get:()=>n[s],enumerable:!(t=gs(n,s))||t.enumerable});return r};var bs=r=>Is(ut({},"__esModule",{value:!0}),r);var po={};Rs(po,{AzureDevOps:()=>de,Bitbucket:()=>ce,BitbucketServer:()=>me,EntityIdentifierProviderType:()=>us,EntityType:()=>as,EntityVersion:()=>is,GitBuildStatusStage:()=>Xt,GitBuildStatusState:()=>Le,GitDiffLineType:()=>lt,GitHub:()=>ge,GitHubIssueCloseReason:()=>ls,GitIssueState:()=>ie,GitLab:()=>fe,GitMergeStrategy:()=>pe,GitPullRequestMergeableState:()=>oe,GitPullRequestReviewState:()=>Y,GitPullRequestState:()=>Z,GraphQLErrors:()=>I,Jira:()=>Re,JiraServer:()=>Ie,PullRequestAsyncStatus:()=>os,Trello:()=>be,default:()=>lo,isFetch:()=>Ue});module.exports=bs(po);var ur=require("diff");var Xt=(s=>(s.Build="build",s.Production="production",s.Staging="staging",s.Test="test",s))(Xt||{}),Le=(p=>(p.ActionRequired="ACTION_REQUIRED",p.Cancelled="CANCELLED",p.Error="ERROR",p.Failed="FAILED",p.Pending="PENDING",p.Running="RUNNING",p.Skipped="SKIPPED",p.Success="SUCCESS",p.Warning="WARNING",p.OptionalActionRequired="OPTIONAL_ACTION_REQUIRED",p))(Le||{}),pe=(o=>(o.MergeCommit="MERGE_COMMIT",o.Rebase="REBASE",o.RebaseThenMergeCommit="REBASE_THEN_MERGE_COMMIT",o.FastForward="FAST_FORWARD",o.Squash="SQUASH",o))(pe||{}),Z=(t=>(t.Open="OPEN",t.Closed="CLOSED",t.Merged="MERGED",t))(Z||{}),Y=(s=>(s.Approved="APPROVED",s.ChangesRequested="CHANGES_REQUESTED",s.Commented="COMMENTED",s.ReviewRequested="REVIEW_REQUESTED",s))(Y||{}),oe=(u=>(u.Behind="BEHIND",u.Blocked="BLOCKED",u.Conflicts="CONFLICTS",u.FailingChecks="FAILING_CHECKS",u.Mergeable="MERGEABLE",u.Unknown="UNKNOWN",u.UnknownAndBlocked="UNKNOWN_AND_BLOCKED",u.Unstable="UNSTABLE",u))(oe||{}),lt=(t=>(t.ADDED="ADDED",t.DELETED="DELETED",t.UNMODIFIED="UNMODIFIED",t))(lt||{});var Zt={APPROVED:0,COMMENTED:1,REVIEW_REQUESTED:2,CHANGES_REQUESTED:3},B=r=>!r||r.length===0?null:r.reduce((n,e)=>Zt[e.state]>Zt[n]?e.state:n,"APPROVED");var R=(r,n)=>{let e={};return r&&(e.Authorization=`${n?"Basic":"Bearer"} ${r}`),e},Yt=r=>r?r.reduce((n,e)=>(n[e]=!0,n),{}):void 0,ee=(r,n,e)=>!r||n.some(t=>r[t])?e:"",er=async r=>{let n=[],e=!0,t;for(;e;){let s=await r(t);n=n.concat(s.data),e=!!s?.pageInfo?.hasNextPage,t=s?.pageInfo?.endCursor||s?.pageInfo?.nextPage}return n};async function pt(r){return(await Promise.allSettled(r)).map(e=>ys(e)).filter(e=>e!=null)}var U=(r,{fallback:n,max:e})=>!r||r<=0?n:e===void 0?r:Math.min(r,e),k=(r,n)=>{if(!n||n.length===0)return r;let e=new Set(n);return r.filter(t=>e.has(t.state))};function ys(r,n=void 0){return r?.status==="fulfilled"?r.value:n}async function tr(r,n,e){if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw new Error("batchSize must be a positive integer");for(let t=0;t<r.length;t+=n){let s=r.slice(t,t+n);await Promise.all(s.map(e))}}var ie=(e=>(e.Open="OPEN",e.Closed="CLOSED",e))(ie||{});var dt=(a=>(a[a.Unknown=0]="Unknown",a[a.Active=1]="Active",a[a.Fixed=2]="Fixed",a[a.WontFix=3]="WontFix",a[a.Closed=4]="Closed",a[a.ByDesign=5]="ByDesign",a[a.Pending=6]="Pending",a))(dt||{});var L=100;var rr=globalThis.fetch;var Ps=async r=>{let n=r.headers.get("content-type")||"",e=null;if(n.startsWith("application/json")){let o=await r.text();e=o.trim().length>0?JSON.parse(o):null}else if(n.startsWith("text/")||n===""||n.startsWith("application/vnd.github.diff")||n.startsWith("application/vnd.github.patch"))e=await r.text();else if(n.startsWith("application/vnd.github.raw+json")||n.startsWith("application/octet-stream"))e=await r.arrayBuffer();else throw new Error(`Unsupported content-type: ${n}`);let t={};r.headers.forEach((o,i)=>{t[i]=o});let s={body:e,headers:t,status:r.status,statusText:r.statusText};if(!r.ok){let o=new Error(r.statusText);throw Object.assign(o,{response:s}),o}return s},ct=r=>async({url:n,...e})=>{let t=await r(n,e);return Ps(t)};var Ue=(r,n=!1)=>r.name==="fetch"||n;var j=class{constructor(n){let e=n?.request||rr;this.config={...n,request:Ue(e,n?.forceIsFetch)?ct(e):e}}updateConfig(n){this.config={...this.config,...n,request:n.request&&Ue(n.request,n?.forceIsFetch??this.config.forceIsFetch)?ct(n.request):this.config.request}}},N=class extends j{};var ws="https://app.vssps.visualstudio.com/_apis",qs="https://vssps.dev.azure.com/",Ss="https://dev.azure.com",q=(r,n={})=>R(n.token||r.token,n.isPAT||r.isPAT),sr=r=>r.url.replace("/_apis/git/repositories/","/_git/").replace(`/${r.repository.project.id}/`,`/${encodeURIComponent(r.repository.project.name)}/`).replace(`/${r.repository.id}/`,`/${encodeURIComponent(r.repository.name)}/`).replace("/pullRequests/","/pullrequest/"),mt=(r,n)=>{let e=n.baseUrl||r.baseUrl||ws;return e=e.replace(/\/$/,""),e},C=(r,n)=>{let e=n.baseUrl||r.baseUrl||Ss;return e=e.replace(/\/$/,""),e},gt=(r,n)=>{let e=n.baseUrl||r.baseUrl||qs;return e=e.replace(/\/$/,""),e};var vs={active:"OPEN",completed:"MERGED",abandoned:"CLOSED"},Es={OPEN:"active",MERGED:"completed",CLOSED:"abandoned"},Ae=100,Cs=200,$s=200,nr=r=>{if(!r||r.length===0)return"active";let n=Array.from(new Set(r.map(e=>Es[e])));return n.length===1?n[0]:"all"},Ds=r=>{if(!r||r.length===0)return["[Microsoft.VSTS.Common.ClosedDate] = ''","[Microsoft.VSTS.Common.ResolvedDate] = ''"];let n=new Set(r),e=n.has("OPEN"),t=n.has("CLOSED");return e&&t?[]:t?["([Microsoft.VSTS.Common.ClosedDate] <> '' OR [Microsoft.VSTS.Common.ResolvedDate] <> '')"]:["[Microsoft.VSTS.Common.ClosedDate] = ''","[Microsoft.VSTS.Common.ResolvedDate] = ''"]},Ls=r=>{if(typeof r!="string")return r;let n=r.charAt(0).toUpperCase()+r.slice(1);return dt[n]??0},Us=new Set([2,3,4,5]),As={10:"APPROVED",5:"APPROVED",0:"REVIEW_REQUESTED",[-5]:"CHANGES_REQUESTED",[-10]:"CHANGES_REQUESTED"},ae=r=>({id:r.id,name:r.displayName??null,username:(r.uniqueName||r.displayName)??null,email:null,avatarUrl:r.imageUrl??null,url:null}),Ge=r=>r.startsWith("refs/heads/")?r.replace("refs/heads/",""):r,Gs=r=>{switch(r){case"conflicts":return"CONFLICTS";case"failure":return"FAILING_CHECKS";case"rejectedByPolicy":return"BLOCKED";case"succeeded":return"MERGEABLE";case"notSet":case"queued":default:return"UNKNOWN"}},ht=(r,n,e,t,s,o)=>`${r}|${n}|${e}|${t}|${s}|${o}`,or=r=>{let n=r.split("|");if(n.length!==6)throw new Error("Invalid Azure comment ID format");return{namespace:n[0],project:n[1],repoName:n[2],prId:n[3],threadId:n[4],commentId:n[5]}},ir=(r,n,e,t,s)=>`${r}|${n}|${e}|${t}|${s}`,ft=r=>{let n=r.split("|");if(n.length!==5)throw new Error("Invalid Azure thread ID format");return{namespace:n[0],project:n[1],repoName:n[2],prId:n[3],threadId:n[4]}},Pe=(r,n,e)=>{let t=!!n.forkSource,s=[],o=[];return n.reviewers.forEach(i=>{let a={reviewer:ae(i),state:As[i.vote??0]||"REVIEW_REQUESTED"};i.isRequired&&s.push(a),o.push(a)}),{id:n.pullRequestId.toString(),title:n.title,description:n.description??null,number:n.codeReviewId,state:vs[n.status],isDraft:n.isDraft,commentCount:null,upvoteCount:null,author:ae(n.createdBy),createdDate:new Date(n.creationDate),updatedDate:new Date(n.closedDate||n.creationDate),closedDate:n.closedDate?new Date(n.closedDate):null,mergedDate:n.closedDate&&n.status==="completed"?new Date(n.closedDate):null,isCrossRepository:t,repository:{id:n.repository.id,name:n.repository.name,project:n.repository.project.name,owner:{login:r},remoteInfo:e?.get(n.repository.id)??null},headCommit:{buildStatuses:null},baseRef:{name:Ge(n.targetRefName),oid:n.lastMergeTargetCommit.commitId},headRef:{name:Ge(n.sourceRefName),oid:n.lastMergeSourceCommit.commitId},url:sr(n),assignees:n.reviewers.map(ae),reviews:o,reviewDecision:B(s),additions:null,deletions:null,fileCount:null,commitCount:null,headRepository:n.forkSource?{id:n.forkSource.repository.id,name:n.forkSource.repository.name,project:void 0,owner:{login:r},remoteInfo:e?.get(n.forkSource.repository.id)??null,isFork:!0}:{id:n.repository.id,name:n.repository.name,project:n.repository.project.name,owner:{login:r},remoteInfo:e?.get(n.repository.id)??null,isFork:!1},mergeableState:Gs(n.mergeStatus),labels:n.labels?.map(i=>({color:null,description:null,id:i.id,name:i.name}))??[],permissions:null}},ar=(r,n)=>({id:n.id,name:n.name,namespace:r,project:n.project.name,projectId:n.project.id,webUrl:n.webUrl,httpsUrl:n.remoteUrl,sshUrl:n.sshUrl,defaultBranch:n.defaultBranch?{name:Ge(n.defaultBranch)}:null,permissions:null}),Ts=(r,n,e,t)=>{let s=e.fields,o=s["System.AssignedTo"],i=s["System.State"],a=s["System.WorkItemType"],u;return i&&a&&(u=t[a]?.[i]),{id:e.id.toString(),number:e.id.toString(),title:s["System.Title"],commentCount:s["System.CommentCount"],author:{avatarUrl:s["System.CreatedBy"]._links?.avatar?.href??null,email:null,id:s["System.CreatedBy"].id,name:s["System.CreatedBy"].uniqueName??null,username:s["System.CreatedBy"].displayName??null,url:null},closedDate:s["Microsoft.VSTS.Common.ClosedDate"]?new Date(s["Microsoft.VSTS.Common.ClosedDate"]):null,createdDate:new Date(s["System.CreatedDate"]),updatedDate:new Date(s["System.ChangedDate"]),url:e._links.html.href,assignees:o?[{avatarUrl:o._links?.avatar?.href??null,email:null,id:o.id,name:o.uniqueName??null,username:o.displayName??null,url:null}]:[],description:s["System.Description"]??null,state:{name:u?.title||i,color:null},type:s["System.WorkItemType"],repository:null,project:{namespace:r,name:n,resourceId:null,key:null,id:null},upvoteCount:0,labels:e.fields["System.Tags"]?.split(";").map(l=>({color:null,description:null,id:null,name:l.trim()}))??[]}},de=class extends N{constructor(){super(...arguments);this.cachedUserIds=new Map;this.inflightUserIds=new Map}getCurrentUserId(e,t){let s=JSON.stringify([e,t.token??null,t.isPAT??this.config.isPAT??!1,t.baseUrl??null]),o=this.cachedUserIds.get(s);if(o)return Promise.resolve(o);let i=this.inflightUserIds.get(s);if(i)return i;let a=this.fetchCurrentUserId(e,t,s);return this.inflightUserIds.set(s,a),a}async fetchCurrentUserId(e,t,s){try{let o=await this.getCurrentUserForInstance({namespace:e},t);return this.cachedUserIds.set(s,o.data.id),o.data.id}finally{this.inflightUserIds.delete(s)}}getRepoApiUrl(e,t,s,o){return`${C(this.config,o)}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/_apis/git/repositories/${encodeURIComponent(s)}`}async getCurrentUser(e={},t={}){if(t.isPAT||this.config.isPAT)throw new Error("Azure DevOps does not support PATs for this function.");let s=`${mt(this.config,t)}/profile/profiles/me`,o=await this.config.request({url:s,headers:q(this.config,t)});return{data:{id:o.body.id,name:o.body.displayName,username:o.body.displayName,email:o.body.emailAddress,avatarUrl:null,url:null}}}async getCurrentUserForInstance(e,t={}){let o=(await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/_apis/ConnectionData`,headers:q(this.config,t)})).body.authorizedUser;if(o.providerDisplayName==="Anonymous")throw new Error("Current user not found.");return{data:{id:o.id,name:o.providerDisplayName,username:o.providerDisplayName,email:o.properties.Account.$value,avatarUrl:null,url:null}}}async getUserForCommit(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let o=(await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.repo.namespace)}/${encodeURIComponent(e.repo.project)}/_apis/git/repositories/${encodeURIComponent(e.repo.name)}/commits/${e.oid}`,headers:q(this.config,t)})).body.author;return{data:{name:o.name,email:o.email,avatarUrl:o.imageUrl}}}async getOrgsForUser(e,t={}){let s=`${mt(this.config,t)}/accounts?memberId=${e.userId}&api-version=6.0`;return{data:(await this.config.request({url:s,headers:q(this.config,t)})).body.value.map(i=>({id:i.accountId,name:i.accountName}))}}async getCollectionsForUser(e,t={}){let s=`${C(this.config,t)}/_apis/projectCollections`;return{data:(await this.config.request({url:s,headers:q(this.config,t)})).body.value.map(i=>({id:i.id,name:i.name}))}}async getAzureProjects(e,t={}){let s=new URL(`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/_apis/projects`);s.searchParams.set("$top",L.toString()),e.cursor&&s.searchParams.set("$skip",e.cursor);let o=await this.config.request({url:s.toString(),headers:q(this.config,t)}),i=o.headers["x-ms-continuationtoken"];return{pageInfo:{hasNextPage:!!i,endCursor:i||null},data:o.body.value.map(a=>({id:a.id,name:a.name,namespace:e.namespace}))}}async getAzureProjectScopeDescriptor(e,t={}){let{namespace:s,projectId:o}=e;return{data:{scope:(await this.config.request({url:`${gt(this.config,t)}/${encodeURIComponent(s)}/_apis/graph/descriptors/${o}?api-version=6.0`,headers:q(this.config,t)})).body.value}}}async getAzureGraphAccountsForAzureProject(e,t={}){let{namespace:s,projectScopeDescriptor:o,cursor:i}=e,a=new URL(`${gt(this.config,t)}/${encodeURIComponent(s)}/_apis/graph/users`);o&&a.searchParams.set("scopeDescriptor",o),i&&a.searchParams.set("continuationToken",i);let u=await this.config.request({url:a.toString(),headers:q(this.config,t)}),l=u.headers["x-ms-continuationtoken"];return{pageInfo:{endCursor:l||null,hasNextPage:!!l},data:u.body.value.map(p=>({avatarUrl:p._links?.avatar?.href??null,descriptor:p.descriptor??null,email:p.mailAddress??null,name:p.displayName??null,storageKeyURL:p._links?.storageKey?.href??null,username:p.displayName??null}))}}async getAccountFromAzureGraphAccount(e,t={}){let{azureGraphAccount:s}=e;if(!s.storageKeyURL)throw new Error("Expected 'storageKeyURL' to not be null for 'azureGraphAccount'");let o=await this.config.request({url:s.storageKeyURL,headers:q(this.config,t)});return{data:{avatarUrl:s.avatarUrl,email:s.email,id:o.body.value,name:s.name,username:s.username,url:null}}}async getAccountsFromAzureGraphAccounts(e,t={}){let s=[];for(let o of e.azureGraphAccounts){let i=await this.getAccountFromAzureGraphAccount({azureGraphAccount:o},t);s.push(i.data)}return{data:s}}async getRepo(e,t={}){if(!e.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/${encodeURIComponent(e.project)}/_apis/git/repositories/${encodeURIComponent(e.name)}`,headers:q(this.config,t)});return{data:ar(e.namespace,s.body)}}async getRepos(e,t={}){let s=[],o=[];return await Promise.all(e.map(async i=>{try{let a=await this.getRepo(i,t);s.push(a.data)}catch(a){o.push({input:i,error:a})}})),{data:s,errors:o}}async getReposForAzureProject(e,t={}){if(!e.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');return{data:(await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/${encodeURIComponent(e.project)}/_apis/git/repositories`,headers:q(this.config,t)})).body.value.map(o=>ar(e.namespace,o))}}async getRefs(e,t,s={}){if(!t.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let o=new URL(`${C(this.config,s)}/${encodeURIComponent(t.repo.namespace)}/${encodeURIComponent(t.repo.project)}/_apis/git/repositories/${encodeURIComponent(t.repo.name)}/refs`);o.searchParams.set("filter",e),o.searchParams.set("$top",L.toString()),t.cursor&&o.searchParams.set("continuationToken",t.cursor);let i=await this.config.request({url:o.toString(),headers:q(this.config,s)}),a=i.headers["x-ms-continuationtoken"];return{pageInfo:{hasNextPage:!!a,endCursor:a||null},data:i.body.value.map(u=>({name:Ge(u.name),commit:{oid:u.objectId,authoredDate:null,committedDate:null}}))}}async getBranches(e,t={}){return this.getRefs("heads",e,t)}async getTags(e,t={}){return this.getRefs("tags",e,t)}async fetchRemoteInfoByRepoId(e,t,s){let o=new Map;if(!e)return o;let i=new Map;for(let{namespace:a,pullRequests:u}of t)for(let l of u)i.has(l.repository.id)||i.set(l.repository.id,a),l.forkSource&&!i.has(l.forkSource.repository.id)&&i.set(l.forkSource.repository.id,a);return await tr([...i],10,async([a,u])=>{try{let l=await this.config.request({url:`${C(this.config,s)}/${encodeURIComponent(u)}/_apis/git/repositories/${encodeURIComponent(a)}`,headers:q(this.config,s)}),{remoteUrl:p,sshUrl:d}=l.body;p&&d&&o.set(a,{cloneUrlHTTPS:p,cloneUrlSSH:d})}catch{}}),o}async getPullRequestsForRepoBase(e,t={},s=Ae){let{page:o,repo:i,assigneeLogins:a,authorLogin:u,reviewerId:l}=e||{},p=o||1;if(!i.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let d=U(e.pageSize,{fallback:s}),c=l??(a&&a.length?a[0]:void 0),g=`searchCriteria.status=${nr(e.states)}`;return c&&(g+=`&searchCriteria.reviewerId=${encodeURIComponent(c)}`),u&&(g+=`&searchCriteria.creatorId=${encodeURIComponent(u)}`),await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(i.namespace)}/${encodeURIComponent(i.project||"")}/_apis/git/repositories/${encodeURIComponent(i.name)}/pullRequests?${g}&%24top=${d}&%24skip=${(p-1)*d}`,headers:q(this.config,t)})}async getPullRequestsForRepo(e,t={}){let s=U(e.pageSize,{fallback:Ae}),o=e.page||1,i=await this.getPullRequestsForRepoBase(e,t,s),a=i.body.value.length===s,u=await this.fetchRemoteInfoByRepoId(e.includeRemoteInfo,[{namespace:e.repo.namespace,pullRequests:i.body.value}],t);return{pageInfo:{hasNextPage:a,nextPage:a?o+1:null,currentPage:o},data:k(i.body.value.map(l=>Pe(e.repo.namespace,l,u)),e.states)}}async getPullRequestsForRepos(e,t={}){if(!e.repos.every(u=>u.project))throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{repos:s}=e||{},o=[];await Promise.all(s.map(async u=>{try{let l=await this.getPullRequestsForRepoBase({repo:u,...e},t);o.push({namespace:u.namespace,pullRequests:l.body.value})}catch(l){if(l.statusCode!==404&&l.statusCode!==401)throw l}}));let i=await this.fetchRemoteInfoByRepoId(e.includeRemoteInfo,o,t),a=o.flatMap(({namespace:u,pullRequests:l})=>l.map(p=>Pe(u,p,i)));return{data:k(a,e.states)}}async getPullRequestsForProjectBase(e,t={},s=Ae){let{namespace:o,project:i,page:a,assigneeLogins:u,authorLogin:l,reviewerId:p,repo:d}=e;if(d?.project&&d.project!==i)throw new Error("Could not fetch pull requests, project mismatch");let c=a||1,g=U(e.pageSize,{fallback:s}),m=p??(u&&u.length?u[0]:void 0),h=new URL(`${C(this.config,t)}/${encodeURIComponent(o)}/${encodeURIComponent(i)}/_apis/git/pullRequests`);return h.searchParams.set("searchCriteria.status",nr(e.states)),h.searchParams.set("$top",g.toString()),h.searchParams.set("$skip",((c-1)*g).toString()),d?.id&&d?.project===i&&h.searchParams.set("searchCriteria.repositoryId",d.id),m&&h.searchParams.set("searchCriteria.reviewerId",m),l&&h.searchParams.set("searchCriteria.creatorId",l),await this.config.request({url:h.toString(),headers:q(this.config,t)})}async getPullRequestsForProject(e,t={}){let s=U(e.pageSize,{fallback:Ae}),o=e.page||1,i=await this.getPullRequestsForProjectBase(e,t,s),a=i.body.value.length===s,u=await this.fetchRemoteInfoByRepoId(e.includeRemoteInfo,i?[{namespace:e.namespace,pullRequests:i.body.value}]:[],t);return{pageInfo:{hasNextPage:a,nextPage:a?o+1:null,currentPage:o},data:k(i?.body.value.map(l=>Pe(e.namespace,l,u))||[],e.states)}}async getPullRequestsForProjects(e,t={}){let{projects:s}=e||{},o=[];await Promise.all(s.map(async u=>{try{if(!e.repo||e.repo.project&&e.repo.project===u.project){let l=await this.getPullRequestsForProjectBase({...u,...e},t);l&&o.push({namespace:u.namespace,pullRequests:l.body.value})}}catch(l){if(l.statusCode!==404&&l.statusCode!==401)throw l}}));let i=await this.fetchRemoteInfoByRepoId(e.includeRemoteInfo,o,t),a=o.flatMap(({namespace:u,pullRequests:l})=>l.map(p=>Pe(u,p,i)));return{data:k(a,e.states)}}async getAzurePullRequestLastMergeStatus(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{repo:{namespace:s,project:o,name:i},pullRequestId:a}=e,u=await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(s)}/${encodeURIComponent(o||"")}/_apis/git/repositories/${i}/pullrequests/${a}?includeCommits=true?api-version=6.0`,headers:{...q(this.config,t)}});if(!u.body.mergeStatus)throw new Error("Could not fetch pull request");return{data:u.body.mergeStatus}}async updatePullRequest(e,t,s){return await this.config.request({method:"PATCH",url:`${C(this.config,s)}/${encodeURIComponent(e.repository.owner.login)}/${encodeURIComponent(e.repository.project)}/_apis/git/repositories/${e.repository.name}/pullrequests/${e.id}?api-version=6.0`,body:t,headers:{...q(this.config,s),"Content-Type":"application/json"}})}async closePullRequest(e,t={}){let{pullRequest:s}=e,o={status:"abandoned"};if(!(await this.updatePullRequest(s,JSON.stringify(o),t)).body.status)throw new Error("Could not close pull request")}async mergePullRequest(e,t={}){let{pullRequest:s,mergeStrategy:o}=e,i;switch(o){case"MERGE_COMMIT":{i="noFastForward";break}case"REBASE":{i="rebase";break}case"REBASE_THEN_MERGE_COMMIT":{i="rebaseMerge";break}case"SQUASH":{i="squash";break}}let a={completionOptions:{mergeStrategy:i},lastMergeSourceCommit:{commitId:s.headRef?.oid},status:"completed"};if(!(await this.updatePullRequest(s,JSON.stringify(a),t)).body.status)throw new Error("Could not merge pull request")}async addPullRequestLabel(e,t={}){let{pullRequest:s,label:o}=e;if(!s.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let i={name:o.name};if(!(await this.config.request({method:"POST",url:`${C(this.config,t)}/${encodeURIComponent(s.repository.owner.login)}/${encodeURIComponent(s.repository.project)}/_apis/git/repositories/${s.repository.name}/pullrequests/${s.id}/labels?api-version=6.0`,body:JSON.stringify(i),headers:{...q(this.config,t),"Content-Type":"application/json"}})).body.id)throw new Error("Could not add pull request label")}async removePullRequestLabel(e,t={}){let{pullRequest:s,label:o}=e;if(!s.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');await this.config.request({method:"DELETE",url:`${C(this.config,t)}/${encodeURIComponent(s.repository.owner.login)}/${encodeURIComponent(s.repository.project)}/_apis/git/repositories/${s.repository.name}/pullrequests/${s.id}/labels/${encodeURIComponent(o.name)}?api-version=6.0`,headers:{...q(this.config,t)}})}async setPullRequestLabels(e,t={}){let{pullRequest:s,labels:o}=e;if(!s.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let i=s.labels;if(!i)throw new Error('Azure DevOps requires "labels" for this function.');for(let a of o)i.find(u=>u.id===a.id)||await this.addPullRequestLabel({pullRequest:s,label:a},t);for(let a of i)o.find(u=>a.id===u.id)||await this.removePullRequestLabel({pullRequest:s,label:a},t)}async setPullRequestAsDraft(e,t={}){let{pullRequest:s,isDraft:o}=e,i={isDraft:o};if(!(await this.updatePullRequest(s,JSON.stringify(i),t)).body.status)throw new Error("Could not set the pull request as draft")}async addPullRequestReviewer(e,t={}){let{pullRequest:s,reviewer:o,isRequired:i}=e,a={id:o.id,isRequired:i};if(!(await this.config.request({method:"PUT",url:`${C(this.config,t)}/${encodeURIComponent(s.repository.owner.login)}/${encodeURIComponent(s.repository.project)}/_apis/git/repositories/${s.repository.name}/pullrequests/${s.id}/reviewers/${o.id}?api-version=6.0`,body:JSON.stringify(a),headers:{...q(this.config,t),"Content-Type":"application/json"}})).body.id)throw new Error("Could not add pull request reviewer")}async removePullRequestReviewer(e,t={}){let{pullRequest:s,reviewer:o}=e;await this.config.request({method:"DELETE",url:`${C(this.config,t)}/${encodeURIComponent(s.repository.owner.login)}/${encodeURIComponent(s.repository.project)}/_apis/git/repositories/${s.repository.name}/pullrequests/${s.id}/reviewers/${o.id}?api-version=6.0`,headers:{...q(this.config,t),Accept:"application/json"}})}async setPullRequestReviewers(e,t={}){let{pullRequest:s,reviewers:o}=e;for(let i of o)s.assignees.find(a=>a.id===i.id)||await this.addPullRequestReviewer({pullRequest:s,reviewer:i,isRequired:!0},t);for(let i of s.assignees)o.find(a=>i.id===a.id)||await this.removePullRequestReviewer({pullRequest:s,reviewer:i},t)}async getIssuesForAzureProject(e,t={}){let{page:s,assigneeLogins:o,authorLogin:i,mentionLogin:a,labelNames:u,statusByWorkItemIdByStatusId:l}=e||{},p=s||1,d=Math.min(U(e.pageSize,{fallback:Cs}),$s),c=["[System.TeamProject] = @project",...Ds(e.states)];i&&c.push(`[System.CreatedBy] = '${i.replace("'","''")}'`),o&&o[0]&&c.push(`[System.AssignedTo] = '${o[0].replace("'","''")}'`),a&&c.push("[System.Id] IN (@recentMentions)"),u&&u.forEach(D=>c.push(`[System.Tags] Contains '${D}'`));let g=`Select [Microsoft.VSTS.Common.ClosedDate], [Microsoft.VSTS.Common.ResolvedDate] From WorkItems Where ${c.join(" AND ")} order by [System.CreatedDate] desc`,m=await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/${encodeURIComponent(e.project)}/_apis/wit/wiql?api-version=6.0`,body:JSON.stringify({query:g}),method:"POST",headers:{...q(this.config,t),"Content-Type":"application/json"}}),h=m.body.workItems.slice((p-1)*d,d*p).map(D=>D.id),y=m.body.workItems.length,f=Math.ceil(y/d),P=y>d*p;if(h.length===0)return{pageInfo:{hasNextPage:!1,nextPage:null,currentPage:p,totalCount:y,totalPages:f},data:[]};let S=await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(e.namespace)}/${encodeURIComponent(e.project)}/_apis/wit/workitemsbatch?api-version=6.0`,body:JSON.stringify({ids:h,$expand:"Links"}),method:"POST",headers:{...q(this.config,t),"Content-Type":"application/json"}});return{pageInfo:{hasNextPage:P,nextPage:P?p+1:null,currentPage:p,totalCount:y,totalPages:f},data:S.body.value.map(D=>Ts(e.namespace,e.project,D,l||{}))}}async getPermissionsForRepos(e,t={}){let{namespace:s,repos:o}=e,i={4:["canPush","canCreateWebhook"],1024:["isAdmin"],2048:["isAdmin"],4096:["isAdmin"],8192:["isAdmin"]},a=d=>{let c="2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87",g=`repoV2/${d.projectId}/${d.id}`;return Object.keys(i).map(m=>({securityNamespaceId:c,token:g,permissions:m}))},u={alwaysAllowAdministrators:!1,evaluations:o.flatMap(a)};return{data:(await this.config.request({method:"POST",url:`${C(this.config,t)}/${encodeURIComponent(s)}/_apis/security/permissionevaluationbatch?api-version=7.0`,body:JSON.stringify(u),headers:{...q(this.config,t),"Content-Type":"application/json"}})).body.evaluations.reduce((d,c)=>{let[,g,m]=c.token.split("/"),h=`${g}/${m}`,y=i[c.permissions];for(let f of y)d[h]===void 0&&(d[h]={canCreateWebhook:!0,canPush:!0,isAdmin:!0}),c.value===!1&&(d[h][f]=!1);return d},{})}}async decorateReposWithPermissions(e,t={}){let{namespace:s,repos:o}=e,i=await this.getPermissionsForRepos({namespace:s,repos:o},t);return{data:o.map(a=>({...a,permissions:i.data[`${a.projectId}/${a.id}`]}))}}async updateIssue(e,t,s={}){return await this.config.request({method:"PATCH",url:`${C(this.config,s)}/${encodeURIComponent(e.project.namespace)}/${encodeURIComponent(e.project.name)}/_apis/wit/workitems/${e.id}?api-version=6.0`,body:JSON.stringify(t),headers:{...q(this.config,s),"Content-Type":"application/json-patch+json"}})}async setIssueStatus(e,t={}){let{issue:s,status:o}=e,i=[{op:"add",path:"/fields/System.State",value:o.name}];if(!(await this.updateIssue(s,i,t)).body.fields?.["System.State"])throw new Error("Could not set issue status")}async setIssueAssignee(e,t={}){let{issue:s,assignee:o}=e,i=[{op:"add",path:"/fields/System.AssignedTo",value:o?.name??""}];if(!(await this.updateIssue(s,i,t)).body.fields?.["System.State"])throw new Error("Could not set issue assignee")}async setIssueLabels(e,t={}){let{issue:s,labels:o}=e,a=[{op:"replace",path:"/fields/System.Tags",value:o.map(l=>l.name).join(";")}];if(!(await this.updateIssue(s,a,t)).body.fields?.["System.Tags"])throw new Error("Could not set issue tags")}async getIssueTypesForAzureProject(e,t={}){if(!e.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{namespace:s,project:o}=e;return{data:(await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(s)}/${encodeURIComponent(o||"")}/_apis/wit/workitemtypes?api-version=6.0`,headers:{...q(this.config,t)}})).body.value}}async getLabelsForProject(e,t={}){let{namespace:s,project:o}=e;return{data:(await this.config.request({url:`${C(this.config,t)}/${encodeURIComponent(s)}/${encodeURIComponent(o||"")}/_apis/wit/tags?api-version=6.0`,headers:{...q(this.config,t)}})).body.value.map(a=>({color:null,description:null,id:a.id,name:a.name,url:a.url}))}}async getPullRequestForRepo(e,t={}){let{repo:s,number:o}=e;if(!s.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let i=await this.config.request({url:`${this.getRepoApiUrl(s.namespace,s.project,s.name,t)}/pullrequests/${o}?api-version=7.1`,headers:q(this.config,t)}),a=await this.fetchRemoteInfoByRepoId(e.includeRemoteInfo,[{namespace:s.namespace,pullRequests:[i.body]}],t);return{data:Pe(s.namespace,i.body,a)}}async getPullRequestDescription(e,t={}){let{repo:s,number:o}=e;if(!s.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');try{return{data:{description:(await this.config.request({url:`${this.getRepoApiUrl(s.namespace,s.project,s.name,t)}/pullrequests/${o}?api-version=7.1`,headers:q(this.config,t)})).body?.description??""}}}catch{return{data:{description:null}}}}async setPullRequestDescription(e,t={}){let{repo:s,number:o,description:i}=e;if(!s.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');return{data:{description:(await this.config.request({method:"PATCH",url:`${this.getRepoApiUrl(s.namespace,s.project,s.name,t)}/pullrequests/${o}?api-version=7.1`,headers:{...q(this.config,t),"Content-Type":"application/json"},body:JSON.stringify({description:i})})).body?.description??i}}}async getMergeBase(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=await this.config.request({url:`${this.getRepoApiUrl(e.repo.namespace,e.repo.project,e.repo.name,t)}/commits/${encodeURIComponent(e.base)}/mergebases?otherCommitId=${encodeURIComponent(e.head)}&api-version=7.1`,headers:q(this.config,t)});if(!s.body.value?.length)throw new Error("No merge base found between the specified commits.");return{data:s.body.value[0].commitId}}async getFileContents(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=await this.config.request({url:`${this.getRepoApiUrl(e.repo.namespace,e.repo.project,e.repo.name,t)}/items?path=${encodeURIComponent(e.path)}&versionDescriptor[version]=${encodeURIComponent(e.ref)}&versionDescriptor[versionType]=commit&api-version=7.1`,headers:{...q(this.config,t),Accept:"application/octet-stream"}});return{data:new Blob([s.body])}}async getPullRequestDiff(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=this.getRepoApiUrl(e.repo.namespace,e.repo.project,e.repo.name,t),o=q(this.config,t),i={...o,Accept:"application/octet-stream"},[a,u]=await Promise.all([this.config.request({url:`${s}/pullrequests/${e.pullRequestId}?api-version=7.1`,headers:o}),this.config.request({url:`${s}/pullrequests/${e.pullRequestId}/iterations?api-version=7.1`,headers:o})]),l=a.body.lastMergeTargetCommit.commitId,p=a.body.lastMergeSourceCommit.commitId,d=u.body.value;if(d.length===0)return"";let c=d[d.length-1],g=1e3,m=[],h=0;for(;;){let E=(await this.config.request({url:`${s}/pullrequests/${e.pullRequestId}/iterations/${c.id}/changes?api-version=7.1&$top=${g}&$skip=${h}`,headers:o})).body.changeEntries??[];if(E.length===0||(m.push(...E),E.length<g))break;h+=E.length}if(m.length===0)return"";let y=5,f=[],P=new TextDecoder,S=w=>w instanceof ArrayBuffer?P.decode(w):typeof w=="string"?w:"",D=async(w,E)=>{try{let se=await this.config.request({url:`${s}/items?path=${encodeURIComponent(w)}&versionDescriptor[version]=${encodeURIComponent(E)}&versionDescriptor[versionType]=commit&includeContent=true&api-version=7.1`,headers:i});return S(se.body)}catch{return""}},$=w=>{if(typeof w=="number")return{add:(w&1)!==0,rename:(w&8)!==0,delete:(w&16)!==0};let E=w.toLowerCase().split(",").map(se=>se.trim());return{add:E.includes("add"),rename:E.includes("rename"),delete:E.includes("delete")}};for(let w=0;w<m.length;w+=y){let E=m.slice(w,w+y),se=await Promise.all(E.map(async ue=>{let{add:le,rename:at,delete:ne}=$(ue.changeType),ye=ue.originalPath??ue.item.originalPath,T=ue.item.path,De=ne?T??ye??"":T??"",Kt=at||ne?ye??De:De,[ps,ds]=await Promise.all([le?Promise.resolve(""):D(Kt,l),ne?Promise.resolve(""):D(De,p)]),cs=le?"/dev/null":`a${Kt}`,ms=ne?"/dev/null":`b${De}`;return(0,ur.createTwoFilesPatch)(cs,ms,ps,ds)}));f.push(...se)}return f.join(`
2
2
  `)}getPullRequestWriteHeaders(e){return{...q(this.config,e),"Content-Type":"application/json"}}setReviewerVote(e,t,s,o,i){return this.config.request({method:"PUT",url:`${e}/pullRequests/${t}/reviewers/${encodeURIComponent(s)}?api-version=7.1`,headers:this.getPullRequestWriteHeaders(i),body:JSON.stringify({vote:o})})}postPullRequestThread(e,t,s,o){return this.config.request({method:"POST",url:`${e}/pullRequests/${t}/threads?api-version=7.1`,headers:this.getPullRequestWriteHeaders(o),body:JSON.stringify({comments:[{parentCommentId:0,content:s,commentType:1}],status:1})})}async getCommentsForPullRequest(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=this.getRepoApiUrl(e.repo.namespace,e.repo.project,e.repo.name,t),o=q(this.config,t),i=await this.config.request({url:`${s}/pullRequests/${e.pullRequestNumber}/threads?api-version=7.1`,headers:o}),a=[];for(let u of i.body.value)if(!(u.isDeleted||u.threadContext))for(let l of u.comments)l.commentType==="system"||l.isDeleted||a.push({id:ht(e.repo.namespace,e.repo.project,e.repo.name,e.pullRequestNumber,u.id,l.id),author:l.author?ae(l.author):null,body:l.content||"",createdAt:l.publishedDate?new Date(l.publishedDate):null,url:""});return{data:a,pageInfo:{hasNextPage:!1,endCursor:null}}}async addCommentToPullRequest(e,t={}){if(!e.pullRequest.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=this.getRepoApiUrl(e.pullRequest.repository.owner.login,e.pullRequest.repository.project,e.pullRequest.repository.name,t);await this.postPullRequestThread(s,e.pullRequest.id,e.comment,t)}async addInlineCommentToPullRequest(e,t={}){if(!e.pullRequest.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=this.getRepoApiUrl(e.pullRequest.repository.owner.login,e.pullRequest.repository.project,e.pullRequest.repository.name,t),o=this.getPullRequestWriteHeaders(t);if(e.threadId){let p=ft(e.threadId),d=e.pullRequest.repository.owner.login,c=e.pullRequest.repository.project,g=e.pullRequest.repository.name,m=String(e.pullRequest.id);if(p.namespace!==d||p.project!==c||p.repoName!==g||p.prId!==m)throw new Error(`Azure thread ID context mismatch: threadId targets ${p.namespace}/${p.project}/${p.repoName} pull request ${p.prId}, but input.pullRequest targets ${d}/${c}/${g} pull request ${m}.`);let y=(await this.config.request({url:`${s}/pullRequests/${e.pullRequest.id}/threads/${p.threadId}?api-version=7.1`,headers:q(this.config,t)})).body.comments?.find(P=>P.parentCommentId===0);if(!y)throw new Error(`Could not determine root comment for Azure DevOps thread ${p.threadId}.`);let f=await this.config.request({method:"POST",url:`${s}/pullRequests/${e.pullRequest.id}/threads/${p.threadId}/comments?api-version=7.1`,headers:o,body:JSON.stringify({content:e.comment,parentCommentId:y.id,commentType:1})});return ht(d,c,g,Number(m),Number(p.threadId),f.body.id)}let i=e.path.startsWith("/")?e.path:`/${e.path}`,a={line:e.line,offset:1},u={filePath:i};e.side==="LEFT"?(u.leftFileStart=a,u.leftFileEnd=a):(u.rightFileStart=a,u.rightFileEnd=a);let l=await this.config.request({method:"POST",url:`${s}/pullRequests/${e.pullRequest.id}/threads?api-version=7.1`,headers:o,body:JSON.stringify({comments:[{parentCommentId:0,content:e.comment,commentType:1}],status:1,threadContext:u})});return ir(e.pullRequest.repository.owner.login,e.pullRequest.repository.project,e.pullRequest.repository.name,Number(e.pullRequest.id),l.body.id)}async editComment(e,t={}){let s=or(e.commentId),o=this.getRepoApiUrl(s.namespace,s.project,s.repoName,t);await this.config.request({method:"PATCH",url:`${o}/pullRequests/${s.prId}/threads/${s.threadId}/comments/${s.commentId}?api-version=7.1`,headers:this.getPullRequestWriteHeaders(t),body:JSON.stringify({content:e.body})})}async editInlineComment(e,t={}){return this.editComment(e,t)}async deleteComment(e,t={}){let s=or(e.commentId),o=this.getRepoApiUrl(s.namespace,s.project,s.repoName,t);await this.config.request({method:"DELETE",url:`${o}/pullRequests/${s.prId}/threads/${s.threadId}/comments/${s.commentId}?api-version=7.1`,headers:q(this.config,t)})}async deleteInlineComment(e,t={}){return this.deleteComment(e,t)}async resolveReviewThread(e,t={}){let s=ft(e.threadId),o=this.getRepoApiUrl(s.namespace,s.project,s.repoName,t);await this.config.request({method:"PATCH",url:`${o}/pullRequests/${s.prId}/threads/${s.threadId}?api-version=7.1`,headers:this.getPullRequestWriteHeaders(t),body:JSON.stringify({status:2})})}async unresolveReviewThread(e,t={}){let s=ft(e.threadId),o=this.getRepoApiUrl(s.namespace,s.project,s.repoName,t);await this.config.request({method:"PATCH",url:`${o}/pullRequests/${s.prId}/threads/${s.threadId}?api-version=7.1`,headers:this.getPullRequestWriteHeaders(t),body:JSON.stringify({status:1})})}async approvePullRequest(e,t={}){if(!e.pullRequest.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=e.pullRequest.repository.owner.login,o=this.getRepoApiUrl(s,e.pullRequest.repository.project,e.pullRequest.repository.name,t),i=await this.getCurrentUserId(s,t);await Promise.all([this.setReviewerVote(o,e.pullRequest.id,i,10,t),e.comment?this.postPullRequestThread(o,e.pullRequest.id,e.comment,t):null])}async requestPullRequestChanges(e,t={}){if(!e.pullRequest.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=e.pullRequest.repository.owner.login,o=this.getRepoApiUrl(s,e.pullRequest.repository.project,e.pullRequest.repository.name,t),i=await this.getCurrentUserId(s,t);await this.postPullRequestThread(o,e.pullRequest.id,e.comment,t),await this.setReviewerVote(o,e.pullRequest.id,i,-5,t)}async commentOnPullRequest(e,t={}){if(!e.pullRequest.repository.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let s=this.getRepoApiUrl(e.pullRequest.repository.owner.login,e.pullRequest.repository.project,e.pullRequest.repository.name,t);await this.postPullRequestThread(s,e.pullRequest.id,e.comment,t)}async getReviewsForPullRequest(e,t={}){if(!e.repo.project)throw new Error('Azure DevOps requires a "project" (name or ID) for this function.');let{namespace:s,project:o,name:i}=e.repo,{pullRequestId:a}=e,u=this.getRepoApiUrl(s,o,i,t),l=q(this.config,t),[p,d]=await Promise.all([this.config.request({url:`${u}/pullRequests/${a}/reviewers?api-version=7.1`,headers:l}),this.config.request({url:`${u}/pullRequests/${a}/threads?api-version=7.1`,headers:l})]),c=(f,P)=>ht(s,o,i,a,f,P),g=f=>ir(s,o,i,a,f),m=new Map;for(let f of d.body.value){if(f.isDeleted)continue;let P=f.comments.filter(T=>!T.isDeleted&&T.commentType!=="system"),S=P.find(T=>T.parentCommentId===0)??P[0];if(!S)continue;let D=S.author?.id;if(!D)continue;let $=P.filter(T=>T.id!==S.id),w=f.threadContext,E=w?.rightFileStart?{side:"RIGHT",start:w.rightFileStart,end:w.rightFileEnd}:w?.leftFileStart?{side:"LEFT",start:w.leftFileStart,end:w.leftFileEnd}:null,se=E?.end?.line??E?.start.line??null,ue=E?.start&&E.end&&E.start.line!==E.end.line?E.start.line:null,le=w?.filePath??"",at=le.startsWith("/")?le.slice(1):le,ne={id:c(f.id,S.id),author:S.author?ae(S.author):null,body:S.content??"",createdAt:S.publishedDate?new Date(S.publishedDate):null,url:"",diffLines:[],filename:at,replies:$.map(T=>({id:c(f.id,T.id),author:T.author?ae(T.author):null,body:T.content??"",createdAt:T.publishedDate?new Date(T.publishedDate):null,url:""})),isOutdated:!1,isResolved:Us.has(Ls(f.status)),line:se,startLine:ue,side:E?.side??null,threadId:g(f.id)},ye=m.get(D);ye?ye.push(ne):m.set(D,[ne])}let h=[],y=new Set;for(let f of p.body.value){if(f.hasDeclined)continue;let P=f.vote??0,S=m.get(f.id);P===0&&!S?.length||(h.push({id:f.id,author:ae(f),body:"",createdAt:null,url:"",reviewComments:S??[]}),y.add(f.id))}for(let[f,P]of m){if(y.has(f)||!P.length)continue;let S=P[0].author;S&&h.push({id:f,author:S,body:"",createdAt:null,url:"",reviewComments:P})}return{data:h}}};var G=(r,n={})=>R(n.token||r.token,n.isPAT||r.isPAT);var O="https://api.bitbucket.org/2.0",Os={OPEN:"OPEN",MERGED:"MERGED",DECLINED:"CLOSED",SUPERSEDED:"CLOSED"},_s={OPEN:["OPEN"],MERGED:["MERGED"],CLOSED:["DECLINED","SUPERSEDED"]},Te=50,lr=r=>{let n=!r||r.length===0?["OPEN"]:Array.from(new Set(r.flatMap(t=>_s[t]))),e=n.map(t=>`state="${t}"`).join(" OR ");return n.length>1?`(${e})`:e},xs=r=>r.replace(/\\/g,"\\\\").replace(/"/g,'\\"'),pr=r=>{let n=r?.trim();if(!n)return null;let e=xs(n);return`(title ~ "${e}" OR description ~ "${e}")`},dr=r=>{let n=!!r.next,e=typeof r.size=="number"?r.size:null,t=typeof r.pagelen=="number"&&r.pagelen>0?r.pagelen:null;return{hasNextPage:n,nextPage:n?r.page+1:null,currentPage:typeof r.page=="number"?r.page:null,totalCount:e,totalPages:e!==null&&t?Math.ceil(e/t):null}},Oe={owner:4,admin:3,contributor:2,member:1},_e=r=>({id:r.uuid,name:r.display_name||r.nickname,username:r.nickname||r.display_name,email:null,avatarUrl:r.links.avatar.href,url:r.links.html.href}),cr=r=>{let n=r.links.clone,e=n?.find(s=>s.name==="ssh"),t=n?.find(s=>s.name==="https");return e&&t?{cloneUrlHTTPS:t.href,cloneUrlSSH:e.href}:null},Rt=r=>({id:r.uuid,namespace:r.workspace.slug,name:r.slug,webUrl:r.links.html.href,httpsUrl:r.links.clone.find(n=>n.name==="https")?.href??null,sshUrl:r.links.clone.find(n=>n.name==="ssh")?.href??null,defaultBranch:{name:r.mainbranch.name},permissions:null}),It=r=>{let n=r.id,e=r.participants?.map(t=>{let s="REVIEW_REQUESTED";return t.approved?s="APPROVED":t.state==="changes_requested"?s="CHANGES_REQUESTED":t.participated_on!==null&&(s="COMMENTED"),{reviewer:_e(t.user),state:s}})??[];return{id:n.toString(),title:r.title,description:r.description,number:n,state:Os[r.state],isDraft:!1,commentCount:r.comment_count,upvoteCount:null,author:_e(r.author),createdDate:new Date(r.created_on),updatedDate:new Date(r.updated_on),closedDate:null,mergedDate:null,repository:{id:r.destination.repository.uuid,name:r.destination.repository.name,owner:{login:r.destination.repository.full_name.split("/")[0]},remoteInfo:cr(r.destination.repository)},headCommit:{buildStatuses:null},baseRef:{name:r.destination.branch.name,oid:r.destination.commit.hash},headRef:{name:r.source.branch.name,oid:r.source.commit.hash},url:r.links.html.href,assignees:null,reviews:e,reviewDecision:B(e),additions:null,deletions:null,fileCount:null,commitCount:null,isCrossRepository:r.source.repository.uuid!==r.destination.repository.uuid,headRepository:{id:r.source.repository.uuid,name:r.source.repository.name,owner:{login:r.source.repository.full_name.split("/")[0]},remoteInfo:cr(r.source.repository)},mergeableState:"MERGEABLE",permissions:null}},ks=r=>{switch(r){case"owner":case"admin":return{canCreateWebhook:!0,canPush:!0,isAdmin:!0};case"write":return{canCreateWebhook:!1,canPush:!0,isAdmin:!1};case"read":case"none":return{canCreateWebhook:!1,canPush:!1,isAdmin:!1}}},Ns=r=>{switch(r){case"owner":case"admin":return{canCreateWebhook:!0,canPush:!0,isAdmin:!0};case"contributor":return{canCreateWebhook:!1,canPush:!0,isAdmin:!1};default:return{canCreateWebhook:!1,canPush:!1,isAdmin:!1}}},ce=class extends j{async refreshToken(n){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 ${n.base64ClientIDColonClientSecret}`},body:`grant_type=refresh_token&refresh_token=${n.refreshToken}`})).body}}async getCurrentUser(n={},e={}){let t=await this.config.request({url:`${O}/user`,headers:G(this.config,e)});return{data:_e(t.body)}}async getUserForCommit(n,e={}){let s=(await this.config.request({url:`${O}/repositories/${n.repo.namespace}/${n.repo.name}/commit/${n.oid}`,headers:G(this.config,e)})).body.author,o=s.raw.match(/([^<]+)<(.+)>/);return{data:{name:o?o[1].trim():null,email:o?o[2]:null,avatarUrl:s.user?.links.avatar.href||null}}}async getRepo(n,e={}){let t=await this.config.request({url:`${O}/repositories/${n.namespace}/${n.name}`,headers:G(this.config,e)});return{data:Rt(t.body)}}async getRepos(n,e={}){let t=[],s=[];return await Promise.all(n.map(async o=>{try{let i=await this.getRepo(o,e);t.push(i.data)}catch(i){s.push({input:o,error:i})}})),{data:t,errors:s}}async getReposForWorkspace(n,e={}){let t=new URL(`${O}/repositories/${encodeURIComponent(n.workspace)}`);t.searchParams.set("page",n.page?.toString()||"1"),t.searchParams.set("pagelen",L.toString()),n.minimumRole&&t.searchParams.set("role",n.minimumRole);let s=await this.config.request({url:t.toString(),headers:G(this.config,e)}),o=!!s.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.page+1:null},data:s.body.values.map(Rt)}}async getAllReposForWorkspace(n,e={}){let t=[],s=1;for(;s!==null;){let o=await this.getReposForWorkspace({workspace:n.workspace,minimumRole:n.minimumRole,page:s},e);t.push(...o.data),s=o.pageInfo.hasNextPage?o.pageInfo.nextPage:null}return t}async getAllReposForWorkspaceWithPermissions(n,e={}){let t=new Map,s=[],o=Oe[n.minimumRole||"member"];o<=Oe.admin&&s.push("admin"),o<=Oe.contributor&&s.push("contributor"),o<=Oe.member&&s.push("member");let i=[];for(let a of s){i=await this.getAllReposForWorkspace({workspace:n.workspace,minimumRole:a},e);for(let u of i)t.has(u.id)||t.set(u.id,a)}return{data:i.map(a=>{let u=t.get(a.id)||"member";return{...a,permissions:Ns(u)}})}}async getReposForCurrentUser(n,e={}){let t=new URL(`${O}/repositories`);t.searchParams.set("role","member"),t.searchParams.set("pagelen",L.toString()),n.cursor&&t.searchParams.set("after",n.cursor);let s=await this.config.request({url:t.toString(),headers:G(this.config,e)}),o=!!s.body.next,i=null;return s.body.next&&(i=new URL(s.body.next).searchParams.get("after")),{pageInfo:{hasNextPage:o,endCursor:i},data:s.body.values.map(Rt)}}async getBranches(n,e={}){let t=new URL(`${O}/repositories/${n.repo.namespace}/${n.repo.name}/refs/branches`);t.searchParams.set("page",n.page?.toString()||"1"),t.searchParams.set("pagelen",L.toString());let s=await this.config.request({url:t.toString(),headers:G(this.config,e)}),o=!!s.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.page+1:null},data:s.body.values.map(i=>{let a=new Date(i.target.date);return{name:i.name,commit:{oid:i.target.hash,authoredDate:a,committedDate:a}}})}}async getTags(n,e={}){let t=new URL(`${O}/repositories/${n.repo.namespace}/${n.repo.name}/refs/tags`);t.searchParams.set("pagelen",L.toString()),n.cursor&&t.searchParams.set("page",n.cursor);let s=await this.config.request({url:t.toString(),headers:G(this.config,e)}),o=!!s.body.next,i=null;return s.body.next&&(i=new URL(s.body.next).searchParams.get("page")),{pageInfo:{hasNextPage:o,endCursor:i},data:s.body.values.map(a=>{let u=new Date(a.target.date);return{name:a.name,commit:{oid:a.target.hash,authoredDate:u,committedDate:u}}})}}async getWorkspacesForCurrentUser(n={},e={}){let t=new URL(`${O}/user/workspaces`);t.searchParams.set("page",n?.page?.toString()||"1"),t.searchParams.set("pagelen","50"),n?.administrator!==void 0&&t.searchParams.set("administrator",n.administrator.toString());let s=await this.config.request({url:t.toString(),headers:G(this.config,e)}),o=!!s.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.page+1:null},data:s.body.values.map(i=>({id:i.workspace.uuid,slug:i.workspace.slug}))}}async getWorkspacesForUser(n,e={}){let t=new URL(`${O}/user/permissions/workspaces`);t.searchParams.set("page",n.page?.toString()||"1"),t.searchParams.set("pagelen","50");let s=await this.config.request({url:t.toString(),headers:G(this.config,e)}),o=!!s.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.page+1:null},data:s.body.values.map(i=>({id:i.workspace.uuid,slug:i.workspace.slug,name:i.workspace.name}))}}async getPullRequestsForUserAndWorkspace(n,e={}){let t=new URL(`${O}/workspaces/${n.workspaceSlug}/pullrequests/${n.userId}`);t.searchParams.set("fields","+values.participants,+values.destination.repository.links.clone.*,+values.source.repository.links.clone.*"),t.searchParams.set("page",n.page?.toString()||"1"),t.searchParams.set("pagelen",U(n.pageSize,{fallback:Te,max:Te}).toString());let s=[lr(n.states)];n.repos&&n.repos.length>0&&s.push(`(${n.repos.map(a=>`source.repository.full_name = "${a.namespace}/${a.name}"`).join(" OR ")})`);let o=pr(n.query);o&&s.push(o),t.searchParams.set("q",s.join(" AND "));let i=await this.config.request({url:t.toString(),headers:G(this.config,e)});return{pageInfo:dr(i.body),data:i.body.values.map(It)}}async getPullRequestsForRepoBase(n,e={}){let t=new URL(`${O}/repositories/${encodeURI(n.repo.namespace)}/${encodeURI(n.repo.name)}/pullrequests`),s=[];n.reviewerId&&s.push(`reviewers.uuid="${n.reviewerId}"`),n.authorLogin&&s.push(`author.uuid="${n.authorLogin}"`);let o=lr(n.states);s.length&&(o+=` AND (${s.join(n.useOrFilter?" OR ":" AND ")})`);let i=pr(n.query);return i&&(o+=` AND ${i}`),t.searchParams.set("fields","+values.participants,+values.destination.repository.links.clone.*,+values.source.repository.links.clone.*"),t.searchParams.set("page",n.page?.toString()||"1"),t.searchParams.set("pagelen",U(n.pageSize,{fallback:Te,max:Te}).toString()),t.searchParams.set("q",o),await this.config.request({url:t.toString(),headers:G(this.config,e)})}async getPullRequestsForRepo(n,e={}){let t=[],s=await this.getPullRequestsForRepoBase(n,e);return s.body.values.forEach(o=>{t.push(It(o))}),{pageInfo:dr(s.body),data:t}}async getPullRequestsForRepos(n,e={}){let t=[];return await Promise.all(n.repos.map(async s=>{try{(await this.getPullRequestsForRepoBase({repo:s,...n},e)).body.values.forEach(i=>{t.push(It(i))})}catch(o){if(o.statusCode!==404&&o.statusCode!==401)throw o}})),{data:t}}async getAccountsForWorkspace(n,e={}){let t=new URL(`${O}/workspaces/${encodeURI(n.workspace)}/members`);t.searchParams.set("page",n.page?.toString()||"1"),t.searchParams.set("pagelen","100");let s=await this.config.request({url:t.toString(),headers:G(this.config,e)}),o=!!s.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.page+1:null},data:s.body.values.map(i=>_e(i.user))}}async getReposPermissionsForCurrentUser(n,e={}){let t=new URL(`${O}/user/permissions/repositories`);t.searchParams.set("page",n.page?.toString()||"1"),t.searchParams.set("pagelen","100");let s=await this.config.request({url:t.toString(),headers:G(this.config,e)}),o=!!s.body.next;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.page+1:null},data:s.body.values.reduce((i,a)=>({...i,[a.repository.uuid]:ks(a.permission)}),{})}}async decorateReposWithPermissions(n,e={}){let t={},s=1;do{let o=await this.getReposPermissionsForCurrentUser({page:s},e);t={...o.data,...t},s=o.pageInfo.hasNextPage?o.pageInfo.nextPage:null}while(s!==null);return{data:n.repos.map(o=>({...o,permissions:t[o.id]??{canCreateWebhook:!1,canPush:!1,isAdmin:!1}}))}}async closePullRequest(n,e={}){let{pullRequest:t}=n;if(!(await this.config.request({method:"POST",url:`${O}/repositories/${t.repository.owner.login}/${t.repository.name}/pullrequests/${t.id}/decline`,headers:G(this.config,e)})).body.title)throw new Error("Could not close pull request")}async mergePullRequest(n,e={}){let{pullRequest:t,mergeStrategy:s}=n,o;switch(s){case"MERGE_COMMIT":{o="merge_commit";break}case"FAST_FORWARD":{o="fast_forward";break}case"SQUASH":{o="squash";break}}let i={merge_strategy:o,type:"pullrequest"};if(!(await this.config.request({method:"POST",url:`${O}/repositories/${t.repository.owner.login}/${t.repository.name}/pullrequests/${t.id}/merge`,body:JSON.stringify(i),headers:{...G(this.config,e),"Content-Type":"application/json"}})).body.title)throw new Error("Could not merge pull request")}async setPullRequestReviewers(n,e={}){let{pullRequest:t,reviewers:s}=n,o={reviewers:s.map(a=>{if(a.username)throw new Error('Bitbucket reviewer requires "username" for this function.');return{username:a.username}})};if(!(await this.config.request({method:"PUT",url:`${O}/repositories/${t.repository.owner.login}/${t.repository.name}/pullrequests/${t.id}`,body:JSON.stringify(o),headers:{...G(this.config,e),"Content-Type":"application/json"}})).body.title)throw new Error("Could not set pull request reviewers")}};var mr=r=>r?r.find(n=>n.permission==="USER_ADMIN"||n.permission==="PROJECT_ADMIN"||n.permission==="ADMIN"||n.permission==="SYS_ADMIN"||n.permission==="REPO_ADMIN")?{canCreateWebhook:!0,canPush:!0,isAdmin:!0}:r.find(n=>n.permission==="REPO_WRITE"||n.permission==="REPO_CREATE"||n.permission==="PROJECT_CREATE"||n.permission==="PROJECT_WRITE")?{canCreateWebhook:!1,canPush:!0,isAdmin:!1}:{canCreateWebhook:!1,canPush:!1,isAdmin:!1}:{canCreateWebhook:!1,canPush:!1,isAdmin:!1};var we=r=>{let n=r.links.self[0].href;return{name:r.displayName,email:r.emailAddress,avatarUrl:r.avatarUrl??(n&&`${n}/avatar.png`),id:r.id.toString(),username:r.name,url:n}},xe=r=>{let n={OPEN:"OPEN",MERGED:"MERGED",DECLINED:"CLOSED"},e={UNAPPROVED:"REVIEW_REQUESTED",NEEDS_WORK:"CHANGES_REQUESTED",APPROVED:"APPROVED"},t=r.reviewers.map(u=>({reviewer:we(u.user),state:e[u.status]})),s=r.toRef.repository.links.clone.find(u=>u.name==="ssh")?.href??null,o=r.toRef.repository.links.clone.find(u=>u.name==="https")?.href??null;o||(o=r.toRef.repository.links.clone.find(u=>u.name==="http")?.href??null);let i=r.fromRef.repository.links.clone.find(u=>u.name==="ssh")?.href??null,a=r.fromRef.repository.links.clone.find(u=>u.name==="https")?.href??null;return a||(a=r.fromRef.repository.links.clone.find(u=>u.name==="http")?.href??null),{id:r.id.toString(),number:r.id,title:r.title,description:r.description,url:r.links.self[0].href,state:n[r.state],isDraft:!1,createdDate:new Date(r.createdDate),updatedDate:new Date(r.updatedDate),closedDate:r.closedDate?new Date(r.closedDate):null,mergedDate:r.state=="MERGED"&&r.closedDate?new Date(r.closedDate):null,baseRef:{name:r.toRef.displayId,oid:r.toRef.latestCommit},headRef:{name:r.fromRef.displayId,oid:r.fromRef.latestCommit},commentCount:r.properties.commentCount,upvoteCount:null,commitCount:null,fileCount:null,additions:null,deletions:null,author:we(r.author.user),assignees:null,reviews:t,reviewDecision:B(t),isCrossRepository:r.fromRef.repository.id!==r.toRef.repository.id,repository:{id:r.toRef.repository.id.toString(),name:r.toRef.repository.name,owner:{login:r.toRef.repository.project.key},remoteInfo:o&&s?{cloneUrlHTTPS:o,cloneUrlSSH:s}:null},headRepository:{id:r.fromRef.repository.id.toString(),name:r.fromRef.repository.name,owner:{login:r.fromRef.repository.project.key},remoteInfo:a&&i?{cloneUrlHTTPS:a,cloneUrlSSH:i}:null},headCommit:null,mergeableState:"MERGEABLE",permissions:null,version:r.version}},gr=r=>({id:r.id.toString(),namespace:r.project.key,name:r.slug,webUrl:r.links.self[0]?.href??null,httpsUrl:r.links.clone.find(n=>n.name==="https"||n.name==="http")?.href??null,sshUrl:r.links.clone.find(n=>n.name==="ssh")?.href??null,defaultBranch:null,permissions:null}),hr=50,Fs={OPEN:"OPEN",MERGED:"MERGED",CLOSED:"DECLINED"},fr=r=>{if(!r||r.length===0)return"OPEN";let n=Array.from(new Set(r.map(e=>Fs[e])));return n.length===1?n[0]:"ALL"},Rr=(r,n)=>typeof r!="number"||n<=0?null:Math.floor(r/n)+1,me=class extends N{getBaseUrl(n){let e=n.baseUrl||this.config.baseUrl;if(!e)throw new Error('Bitbucket Server requires "baseUrl"');return e}getRequestHeaders(n){return R(n.token||this.config.token)}async getCurrentUser(n={},e={}){let t=await this.config.request({url:`${this.getBaseUrl(e)}/users?limit=2`,headers:this.getRequestHeaders(e)}),{headers:{"x-auserid":s,"x-ausername":o}}=t,i=s?parseInt(s,10):null,a=decodeURIComponent(o),l=(await this.config.request({url:`${this.getBaseUrl(e)}/users?filter=${o}&avatarSize=64`,headers:this.getRequestHeaders(e)})).body.values.find(({emailAddress:p,id:d,name:c,slug:g})=>i?i===d:a===c||a===p||a===g);if(!l)throw new Error("Could not find current Bitbucket Server user");return{data:we(l)}}async getUserForCommit(n,e){let{repo:t,oid:s}=n,o=await this.config.request({url:`${this.getBaseUrl(e)}/projects/${t.namespace}/repos/${t.name}/commits/${s}`,headers:this.getRequestHeaders(e)});if(!o.body.author)throw new Error("Could not find user for commit");return{data:we(o.body.author)}}async getRepo(n,e={}){let t=await this.config.request({url:`${this.getBaseUrl(e)}/projects/${n.namespace}/repos/${n.name}`,headers:this.getRequestHeaders(e)});return{data:gr(t.body)}}async getRepos(n,e={}){let t=[],s=[];return await Promise.all(n.map(async o=>{try{let i=await this.getRepo(o,e);t.push(i.data)}catch(i){s.push({input:o,error:i})}})),{data:t,errors:s}}async getReposForCurrentUser(n,e={}){let t=n.page??0,s=await this.config.request({url:`${this.getBaseUrl(e)}/repos?start=${t}`,headers:this.getRequestHeaders(e)});return{pageInfo:{hasNextPage:!s.body.isLastPage,nextPage:s.body.nextPageStart},data:s.body.values.map(gr)}}async getRepoPermissionsForUsername(n,e={}){let t=new URL(`${this.getBaseUrl(e)}/projects/${n.repo.namespace}/repos/${n.repo.name}/permissions/search?filterText=${n.username}`);try{let s=await this.config.request({url:t.toString(),headers:this.getRequestHeaders(e)});return{data:mr(s.body.values)}}catch(s){if(s.response?.status===401)return{data:{canCreateWebhook:!1,canPush:!1,isAdmin:!1}};throw s}}async decorateReposWithPermissions(n,e={}){return await Promise.all(n.repos.map(async s=>{let o=await this.getRepoPermissionsForUsername({repo:s,username:n.username},e);return{...s,permissions:o.data}}))}async getPullRequestsForRepoBase(n,e={}){let t=new URL(`${this.getBaseUrl(e)}/projects/${encodeURI(n.repo.namespace)}/repos/${encodeURI(n.repo.name)}/pull-requests`);return t.searchParams.set("state",fr(n.states)),t.searchParams.set("start",n.page?.toString()||"0"),t.searchParams.set("limit",U(n.pageSize,{fallback:hr}).toString()),n.reviewerLogin&&(t.searchParams.set("role.1","REVIEWER"),t.searchParams.set("username.1",n.reviewerLogin)),await this.config.request({url:t.toString(),headers:this.getRequestHeaders(e)})}async getPullRequestsForRepo(n,e={}){let t=[],s=await this.getPullRequestsForRepoBase(n,e);s.body.values.forEach(i=>{if(n.authorLogin&&i.author.user.name!==n.authorLogin)return null;t.push(xe(i))});let o=!s.body.isLastPage;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.nextPageStart:null,currentPage:Rr(s.body.start,s.body.limit)},data:k(t,n.states)}}async getPullRequestsForRepos(n,e={}){let t=[];return await Promise.all(n.repos.map(async s=>{try{(await this.getPullRequestsForRepoBase({repo:s,...n},e)).body.values.forEach(i=>{if(n.authorLogin&&i.author.user.name!==n.authorLogin)return null;t.push(xe(i))})}catch(o){if(o.statusCode!==404&&o.statusCode!==401)throw o}})),{data:k(t,n.states)}}async getPullRequestsForCurrentUser(n,e={}){let t=new URL(`${this.getBaseUrl(e)}/dashboard/pull-requests`);t.searchParams.set("state",fr(n.states)),t.searchParams.set("start",n.page?.toString()||"0");let s=U(n.pageSize,{fallback:hr});t.searchParams.set("limit",s.toString()),n.reviewerLogin&&(t.searchParams.set("role.1","REVIEWER"),t.searchParams.set("username.1",n.reviewerLogin));let o=await this.config.request({url:t.toString(),headers:this.getRequestHeaders(e)}),i=!o.body.isLastPage;return{pageInfo:{hasNextPage:i,nextPage:i?o.body.nextPageStart:null,currentPage:Rr(o.body.start,o.body.limit)},data:k(o.body.values.map(xe),n.states)}}async closePullRequest(n,e={}){let{pullRequest:t}=n;if(t.version===void 0)throw new Error('Bitbucket Server requires "version" for this function.');if(!(await this.config.request({method:"POST",url:`${this.getBaseUrl(e)}/projects/${t.repository.owner.login}/repos/${t.repository.name}/pull-requests/${t.id}/decline`,body:JSON.stringify({version:t.version}),headers:{...this.getRequestHeaders(e),"Content-Type":"application/json"}})).body.title)throw new Error("Could not close pull request")}async mergePullRequest(n,e={}){let{pullRequest:t,mergeStrategyId:s}=n;if(n.mergeStrategy)throw new Error('Bitbucket Server uses "mergeStrategyId" instead of "mergeStrategy".');if(t.version===void 0)throw new Error('Bitbucket Server requires "version" for this function.');if(!(await this.config.request({method:"POST",url:`${this.getBaseUrl(e)}/projects/${t.repository.owner.login}/repos/${t.repository.name}/pull-requests/${t.id}/merge`,body:JSON.stringify({strategyId:s,version:t.version}),headers:{...this.getRequestHeaders(e),"Content-Type":"application/json"}})).body.title)throw new Error("Could not merge pull request")}async getMergeStrategies(n={}){let e=await this.config.request({url:`${this.getBaseUrl(n)}/admin/pull-requests/git`,headers:{...this.getRequestHeaders(n),"Content-Type":"application/json"}});return{data:{defaultStrategy:e.body.mergeConfig.defaultStrategy,strategies:e.body.mergeConfig.strategies}}}async setPullRequestReviewers(n,e={}){let{pullRequest:t,reviewers:s}=n;if(t.version===void 0)throw new Error('Bitbucket Server requires "version" for this function.');let o={reviewers:s.map(a=>{if(a.username)throw new Error('Bitbucket Server reviewer requires "username" for this function.');return{user:{name:a.username}}}),version:t.version};if(!(await this.config.request({method:"PUT",url:`${this.getBaseUrl(e)}/projects/${t.repository.owner.login}/repos/${t.repository.name}/pull-requests/${t.id}`,body:JSON.stringify(o),headers:{...this.getRequestHeaders(e),"Content-Type":"application/json"}})).body.title)throw new Error("Could not set pull request reviewers")}async getAccountsForProject(n,e={}){let t=new URL(`${this.getBaseUrl(e)}/projects/${encodeURI(n.project)}/permissions/users`);t.searchParams.set("start",n.page?.toString()||"0"),t.searchParams.set("limit","50");let s=await this.config.request({url:t.toString(),headers:this.getRequestHeaders(e)}),o=s.body.values.length!==0;return{pageInfo:{hasNextPage:o,nextPage:o?s.body.start+s.body.values.length:null},data:s.body.values.map(i=>we(i.user))}}};var Tr=require("js-base64");var I=class extends Error{constructor(e,t){let s=t?.map(i=>`'${i.message}'`).join(", "),o=s?`${e}: ${s}`:e;super(o);this.graphQLErrors=t??[]}};var js={AS_CODE_OWNER:[3,0,0],CHECK_RUN:[3,0,0],LATEST_REVIEWS:[3,0,0],VIEWER_CAN_MERGE_AS_ADMIN:[3,5,0],ISSUE_FULL_DATABASE_ID:[3,12,0],PR_FULL_DATABASE_ID:[3,13,0],PR_REVIEW_FULL_DATABASE_ID:[3,13,0],PR_REVIEW_COMMENT_FULL_DATABASE_ID:[3,13,0]},Ir=15,br=100,qe={__typename:"User",id:"U_kgDNJ5k",databaseId:10137,name:"Deleted user",login:"ghost",email:"",avatarUrl:"https://avatars.githubusercontent.com/u/10137?v=4",url:"https://github.com/ghost"},x=r=>!!r,M=(r,n)=>{let e=js[n];for(let t=0;t<3;t++){if(r[t]>e[t])return!0;if(r[t]<e[t])return!1}return!0},Ne="https://api.github.com",Qs=`${Ne}/graphql`,Fe=`
3
3
  description
4
4
  dueOn
@@ -1007,13 +1007,13 @@ labels {
1007
1007
  ${r?`project { ${Ee} archived } sourceProject { ${Ee} }`:""}
1008
1008
  ${n?`milestone { ${Nt} }`:""}
1009
1009
  ${e?`headPipeline { ${vn} }`:""}
1010
- `,_=r=>`${r.namespace}/${r.name}`,En=r=>`${r.namespace}/${r.name}`,Cn=r=>/Field '[^']+' (?:doesn'?t|does not) exist on type|Field '[^']+' is not defined|undefined field '[^']+' on type/i.test(r.message),$n=r=>({canCreateWebhook:r.adminOperations,canPush:r.pushCode,isAdmin:r.adminOperations}),At=r=>({id:r.id.replace(he,""),graphQLId:r.id,namespace:xt(r.fullPath),name:kt(r.fullPath),webUrl:r.webUrl,httpsUrl:r.httpUrlToRepo,sshUrl:r.sshUrlToRepo,defaultBranch:r.repository?.rootRef?{name:r.repository.rootRef}:null,permissions:$n(r.userPermissions)}),Dn=r=>({path:r.path,isDirectory:r.type==="tree"}),Ln={opened:"OPEN",merged:"MERGED",closed:"CLOSED"},Un={OPEN:"opened",MERGED:"merged",CLOSED:"closed"},xr=r=>{if(!r||r.length===0)return"state: opened";let n=Array.from(new Set(r));return n.length>1?"":`state: ${Un[n[0]]}`},kr=r=>{if(!r||r.length===0)return"state: opened";let n=Array.from(new Set(r));return n.length>1?"":`state: ${n[0]==="CLOSED"?"closed":"opened"}`},te=100,ze=(r,n,e)=>!n&&r?.startsWith("/")?`https://gitlab.com${r}`:n&&r?.startsWith("/")&&e?`${e.replace(/\/+?$/,"")}${r}`:r,K=(r,n,e)=>{let t=ze(r.avatarUrl,n,e);return{id:r.id.replace(Fr,""),graphQLId:r.id,name:r.name,username:r.username,email:r.publicEmail??null,avatarUrl:t,url:r.webUrl}},jt=r=>({color:r.color,description:r.description,id:r.id.replace(wn,""),graphQLId:r.id,name:r.title}),An=(r,n)=>r?r==="FAILED"&&n?"WARNING":{CANCELED:"CANCELLED",CREATED:"PENDING",FAILED:"FAILED",MANUAL:"OPTIONAL_ACTION_REQUIRED",PENDING:"PENDING",PREPARING:"RUNNING",RUNNING:"RUNNING",SCHEDULED:"PENDING",SKIPPED:"SKIPPED",SUCCESS:"SUCCESS",WAITING_FOR_CALLBACK:"PENDING",WAITING_FOR_RESOURCE:"PENDING"}[r]:null,Gn=(r,n,e)=>{let t={APPROVED:"APPROVED",REQUESTED_CHANGES:"CHANGES_REQUESTED",REVIEWED:"COMMENTED",UNAPPROVED:"REVIEW_REQUESTED",UNREVIEWED:"REVIEW_REQUESTED"};return{reviewer:K(r,n,e),state:r.mergeRequestInteraction?.reviewState?t[r.mergeRequestInteraction.reviewState]:"REVIEW_REQUESTED"}},Gt=(r,n,e,t,s)=>{let o=r.reviewers?.nodes?r.reviewers.nodes.map(i=>Gn(i,t,s)):null;return{id:r.id.replace(yn,""),graphQLId:r.id,title:r.title,description:r.description,number:parseInt(r.iid,10),state:Ln[r.state],commentCount:r.userNotesCount||0,upvoteCount:r.upvotes,author:r.author?K(r.author,t,s):null,createdDate:new Date(r.createdAt),isDraft:r.draft,repository:{id:n.id,graphQLId:n.graphQLId,name:n.name,owner:{login:n.namespace},remoteInfo:n.httpsUrl&&n.sshUrl?{cloneUrlHTTPS:n.httpsUrl,cloneUrlSSH:n.sshUrl}:null},isCrossRepository:e!=null&&e.id!==n.id,headRepository:e?{id:e.id,graphQLId:e.graphQLId,name:e.name,owner:{login:e.namespace},remoteInfo:{cloneUrlHTTPS:e.httpsUrl,cloneUrlSSH:e.sshUrl}}:null,headCommit:{buildStatuses:r.headPipeline?.stages?.nodes?.flatMap(i=>i.jobs?.nodes?.map(a=>({completedAt:a.finishedAt?new Date(a.finishedAt):null,description:null,name:a.name??null,state:An(a.status,a.allowFailure),stage:i.name??null,startedAt:new Date(a.createdAt),url:`${n.webUrl}/-/jobs/${a.id.replace(Sn,"")}`}))??[])??[]},baseRef:{name:r.targetBranch,oid:r.diffRefs?.baseSha??null},headRef:{name:r.sourceBranch,oid:r.diffRefs?.headSha??null},url:r.webUrl,updatedDate:new Date(r.updatedAt),closedDate:r.mergedAt?new Date(r.mergedAt):null,mergedDate:r.mergedAt?new Date(r.mergedAt):null,assignees:r.assignees?.nodes?r.assignees.nodes.map(i=>K(i,t,s)):null,reviews:o,reviewDecision:B(o),additions:r.diffStatsSummary?.additions||0,deletions:r.diffStatsSummary?.deletions||0,fileCount:r.diffStatsSummary?.fileCount||0,commitCount:r.commitCount||0,mergeableState:bn[r.mergeStatusEnum],milestone:r.milestone?Qt(r.milestone,n.webUrl):null,labels:r.labels?.nodes?.map(jt)??[],permissions:null}},Tt=(r,n,e,t)=>({author:K(r.author,e,t),assignees:r.assignees.nodes.map(s=>K(s,e,t)),commentCount:r.userNotesCount,closedDate:r.closedAt?new Date(r.closedAt):null,createdDate:new Date(r.createdAt),description:r.description,graphQLId:r.id,id:r.id.replace(Pn,""),labels:r.labels?.nodes?.map(jt)??[],number:r.iid,repository:{id:n.id.replace(he,""),graphQLId:n.id,name:n.name,owner:{login:n.namespace}},updatedDate:new Date(r.updatedAt),upvoteCount:r.upvotes,state:{name:r.state,color:null},type:r.type,title:r.title,url:r.webUrl,milestone:r.milestone?Qt(r.milestone,n.webUrl):null}),Qt=(r,n)=>({id:r.id.replace(qn,""),graphQLId:r.id,number:parseInt(r.iid,10),title:r.title,description:r.description,isOpen:r.state==="active",url:`${n}/-/${r.webPath.replace(/.+?\/-\//,"")}`,startDate:r.startDate?new Date(r.startDate):null,dueDate:r.dueDate?new Date(r.dueDate):null}),Tn=r=>Buffer.from(JSON.stringify(r),"utf8").toString("base64"),On=(r,n)=>{if(!r)return{page:1,perPage:n};try{let e=JSON.parse(Buffer.from(r,"base64").toString("utf8")),t=typeof e.page=="number"&&e.page>0?e.page:1,s=typeof e.perPage=="number"&&e.perPage>0?e.perPage:n;return{page:t,perPage:s}}catch{return{page:1,perPage:n}}},_n=(r,n,e)=>({id:r.id.toString(),graphQLId:`${Fr}${r.id}`,name:r.name,username:r.username,email:r.email??null,avatarUrl:ze(r.avatar_url,n,e),url:r.web_url}),Nr=(r,n,e)=>({avatarUrl:ze(r.avatar_url,n,e)??"",email:null,name:r.name}),xn=r=>r?.new_line!=null?"RIGHT":r?.old_line!=null?"LEFT":null,kn=r=>{let n=r.old_path||r.new_path,e=r.new_path||r.old_path,t=[`diff --git a/${n} b/${e}`];return r.new_file&&r.b_mode?t.push(`new file mode ${r.b_mode}`):r.deleted_file&&r.a_mode?t.push(`deleted file mode ${r.a_mode}`):r.a_mode&&r.b_mode&&r.a_mode!==r.b_mode&&(t.push(`old mode ${r.a_mode}`),t.push(`new mode ${r.b_mode}`)),r.renamed_file&&(t.push(`rename from ${r.old_path}`),t.push(`rename to ${r.new_path}`)),r.diff&&r.diff.length>0?(t.push(`--- ${r.new_file?"/dev/null":`a/${n}`}`),t.push(`+++ ${r.deleted_file?"/dev/null":`b/${e}`}`),`${t.join(`
1010
+ `,_=r=>`${r.namespace}/${r.name}`,En=r=>`${r.namespace}/${r.name}`,Cn=r=>/Field '[^']+' (?:doesn'?t|does not) exist on type|Field '[^']+' is not defined|undefined field '[^']+' on type/i.test(r.message),$n=r=>({canCreateWebhook:r.adminOperations,canPush:r.pushCode,isAdmin:r.adminOperations}),At=r=>({id:r.id.replace(he,""),graphQLId:r.id,namespace:xt(r.fullPath),name:kt(r.fullPath),webUrl:r.webUrl,httpsUrl:r.httpUrlToRepo,sshUrl:r.sshUrlToRepo,defaultBranch:r.repository?.rootRef?{name:r.repository.rootRef}:null,permissions:$n(r.userPermissions)}),Dn=r=>({path:r.path,isDirectory:r.type==="tree"}),Ln={opened:"OPEN",merged:"MERGED",closed:"CLOSED"},Un={OPEN:"opened",MERGED:"merged",CLOSED:"closed"},xr=r=>{if(!r||r.length===0)return"state: opened";let n=Array.from(new Set(r));return n.length>1?"":`state: ${Un[n[0]]}`},kr=r=>{if(!r||r.length===0)return"state: opened";let n=Array.from(new Set(r));return n.length>1?"":`state: ${n[0]==="CLOSED"?"closed":"opened"}`},te=100,An=20,Gn=250,ze=(r,n,e)=>!n&&r?.startsWith("/")?`https://gitlab.com${r}`:n&&r?.startsWith("/")&&e?`${e.replace(/\/+?$/,"")}${r}`:r,K=(r,n,e)=>{let t=ze(r.avatarUrl,n,e);return{id:r.id.replace(Fr,""),graphQLId:r.id,name:r.name,username:r.username,email:r.publicEmail??null,avatarUrl:t,url:r.webUrl}},jt=r=>({color:r.color,description:r.description,id:r.id.replace(wn,""),graphQLId:r.id,name:r.title}),Tn=(r,n)=>r?r==="FAILED"&&n?"WARNING":{CANCELED:"CANCELLED",CREATED:"PENDING",FAILED:"FAILED",MANUAL:"OPTIONAL_ACTION_REQUIRED",PENDING:"PENDING",PREPARING:"RUNNING",RUNNING:"RUNNING",SCHEDULED:"PENDING",SKIPPED:"SKIPPED",SUCCESS:"SUCCESS",WAITING_FOR_CALLBACK:"PENDING",WAITING_FOR_RESOURCE:"PENDING"}[r]:null,On=(r,n,e)=>{let t={APPROVED:"APPROVED",REQUESTED_CHANGES:"CHANGES_REQUESTED",REVIEWED:"COMMENTED",UNAPPROVED:"REVIEW_REQUESTED",UNREVIEWED:"REVIEW_REQUESTED"};return{reviewer:K(r,n,e),state:r.mergeRequestInteraction?.reviewState?t[r.mergeRequestInteraction.reviewState]:"REVIEW_REQUESTED"}},Gt=(r,n,e,t,s)=>{let o=r.reviewers?.nodes?r.reviewers.nodes.map(i=>On(i,t,s)):null;return{id:r.id.replace(yn,""),graphQLId:r.id,title:r.title,description:r.description,number:parseInt(r.iid,10),state:Ln[r.state],commentCount:r.userNotesCount||0,upvoteCount:r.upvotes,author:r.author?K(r.author,t,s):null,createdDate:new Date(r.createdAt),isDraft:r.draft,repository:{id:n.id,graphQLId:n.graphQLId,name:n.name,owner:{login:n.namespace},remoteInfo:n.httpsUrl&&n.sshUrl?{cloneUrlHTTPS:n.httpsUrl,cloneUrlSSH:n.sshUrl}:null},isCrossRepository:e!=null&&e.id!==n.id,headRepository:e?{id:e.id,graphQLId:e.graphQLId,name:e.name,owner:{login:e.namespace},remoteInfo:{cloneUrlHTTPS:e.httpsUrl,cloneUrlSSH:e.sshUrl}}:null,headCommit:{buildStatuses:r.headPipeline?.stages?.nodes?.flatMap(i=>i.jobs?.nodes?.map(a=>({completedAt:a.finishedAt?new Date(a.finishedAt):null,description:null,name:a.name??null,state:Tn(a.status,a.allowFailure),stage:i.name??null,startedAt:new Date(a.createdAt),url:`${n.webUrl}/-/jobs/${a.id.replace(Sn,"")}`}))??[])??[]},baseRef:{name:r.targetBranch,oid:r.diffRefs?.baseSha??null},headRef:{name:r.sourceBranch,oid:r.diffRefs?.headSha??null},url:r.webUrl,updatedDate:new Date(r.updatedAt),closedDate:r.mergedAt?new Date(r.mergedAt):null,mergedDate:r.mergedAt?new Date(r.mergedAt):null,assignees:r.assignees?.nodes?r.assignees.nodes.map(i=>K(i,t,s)):null,reviews:o,reviewDecision:B(o),additions:r.diffStatsSummary?.additions||0,deletions:r.diffStatsSummary?.deletions||0,fileCount:r.diffStatsSummary?.fileCount||0,commitCount:r.commitCount||0,mergeableState:bn[r.mergeStatusEnum],milestone:r.milestone?Qt(r.milestone,n.webUrl):null,labels:r.labels?.nodes?.map(jt)??[],permissions:null}},Tt=(r,n,e,t)=>({author:K(r.author,e,t),assignees:r.assignees.nodes.map(s=>K(s,e,t)),commentCount:r.userNotesCount,closedDate:r.closedAt?new Date(r.closedAt):null,createdDate:new Date(r.createdAt),description:r.description,graphQLId:r.id,id:r.id.replace(Pn,""),labels:r.labels?.nodes?.map(jt)??[],number:r.iid,repository:{id:n.id.replace(he,""),graphQLId:n.id,name:n.name,owner:{login:n.namespace}},updatedDate:new Date(r.updatedAt),upvoteCount:r.upvotes,state:{name:r.state,color:null},type:r.type,title:r.title,url:r.webUrl,milestone:r.milestone?Qt(r.milestone,n.webUrl):null}),Qt=(r,n)=>({id:r.id.replace(qn,""),graphQLId:r.id,number:parseInt(r.iid,10),title:r.title,description:r.description,isOpen:r.state==="active",url:`${n}/-/${r.webPath.replace(/.+?\/-\//,"")}`,startDate:r.startDate?new Date(r.startDate):null,dueDate:r.dueDate?new Date(r.dueDate):null}),_n=r=>Buffer.from(JSON.stringify(r),"utf8").toString("base64"),xn=(r,n)=>{if(!r)return{page:1,perPage:n};try{let e=JSON.parse(Buffer.from(r,"base64").toString("utf8")),t=typeof e.page=="number"&&e.page>0?e.page:1,s=typeof e.perPage=="number"&&e.perPage>0?e.perPage:n;return{page:t,perPage:s}}catch{return{page:1,perPage:n}}},kn=(r,n,e)=>({id:r.id.toString(),graphQLId:`${Fr}${r.id}`,name:r.name,username:r.username,email:r.email??null,avatarUrl:ze(r.avatar_url,n,e),url:r.web_url}),Nr=(r,n,e)=>({avatarUrl:ze(r.avatar_url,n,e)??"",email:null,name:r.name}),Nn=r=>r?.new_line!=null?"RIGHT":r?.old_line!=null?"LEFT":null,Fn=r=>{let n=r.old_path||r.new_path,e=r.new_path||r.old_path,t=[`diff --git a/${n} b/${e}`];return r.new_file&&r.b_mode?t.push(`new file mode ${r.b_mode}`):r.deleted_file&&r.a_mode?t.push(`deleted file mode ${r.a_mode}`):r.a_mode&&r.b_mode&&r.a_mode!==r.b_mode&&(t.push(`old mode ${r.a_mode}`),t.push(`new mode ${r.b_mode}`)),r.renamed_file&&(t.push(`rename from ${r.old_path}`),t.push(`rename to ${r.new_path}`)),r.diff&&r.diff.length>0?(t.push(`--- ${r.new_file?"/dev/null":`a/${n}`}`),t.push(`+++ ${r.deleted_file?"/dev/null":`b/${e}`}`),`${t.join(`
1011
1011
  `)}
1012
1012
  ${r.diff.endsWith(`
1013
1013
  `)?r.diff:`${r.diff}
1014
1014
  `}`):`${t.join(`
1015
1015
  `)}
1016
- `},jr="|",_t=(r,n,e,t)=>[r,n,e.toString(),t.toString()].join(jr),Nn=r=>{let n=r.split(jr);if(n.length!==4)throw new Error("Invalid GitLab comment ID format \u2014 expected a composite ID produced by getCommentsForPullRequest or addInlineCommentToPullRequest.");return{namespace:n[0],name:n[1],mergeRequestIid:n[2],noteId:n[3]}},Ot=(r,n,e,t)=>({author:r.author?_n(r.author,n,e):null,body:r.body,createdAt:r.created_at?new Date(r.created_at):null,id:_t(t.namespace,t.name,t.mergeRequestIid,r.id),url:""}),fe=class extends N{getIsSelfHosted(n){return!!n.baseUrl||!!this.config.baseUrl}async getCurrentUser(n={},e={}){let s=(await v(this.config,{query:`
1016
+ `},jr="|",_t=(r,n,e,t)=>[r,n,e.toString(),t.toString()].join(jr),jn=r=>{let n=r.split(jr);if(n.length!==4)throw new Error("Invalid GitLab comment ID format \u2014 expected a composite ID produced by getCommentsForPullRequest or addInlineCommentToPullRequest.");return{namespace:n[0],name:n[1],mergeRequestIid:n[2],noteId:n[3]}},Ot=(r,n,e,t)=>({author:r.author?kn(r.author,n,e):null,body:r.body,createdAt:r.created_at?new Date(r.created_at):null,id:_t(t.namespace,t.name,t.mergeRequestIid,r.id),url:""}),fe=class extends N{getIsSelfHosted(n){return!!n.baseUrl||!!this.config.baseUrl}async getCurrentUser(n={},e={}){let s=(await v(this.config,{query:`
1017
1017
  query getCurrentUser {
1018
1018
  currentUser {
1019
1019
  ${V}
@@ -1360,15 +1360,15 @@ query getPullRequestForRepo($fullPath: ID!, $iid: String!) {
1360
1360
  }
1361
1361
  }
1362
1362
  }
1363
- `,variables:{fullPath:t,iid:n.number.toString()}},e)).body.data?.project,i=o?.mergeRequest;if(!o||!i)return{data:null};let a=ve(o),u=i.sourceProject?ve(i.sourceProject):null;return{data:Gt(i,a,u,this.getIsSelfHosted(e),this.config.baseUrl??e.baseUrl)}}getMergeRequestUrl(n,e,t){let s=_(n);return`${A(this.config,t)}/projects/${encodeURIComponent(s)}/merge_requests/${e}`}async getPullRequestDescription(n,e={}){try{return{data:{description:(await this.config.request({url:this.getMergeRequestUrl(n.repo,n.number,e),headers:R(e.token||this.config.token)})).body?.description??""}}}catch{return{data:{description:null}}}}async setPullRequestDescription(n,e={}){return{data:{description:(await this.config.request({method:"PUT",url:this.getMergeRequestUrl(n.repo,n.number,e),headers:{...R(e.token||this.config.token),"Content-Type":"application/json"},body:JSON.stringify({description:n.description})})).body?.description??n.description}}}async getFileContents(n,e={}){let t=_(n.repo),s=new URL(`${A(this.config,e)}/projects/${encodeURIComponent(t)}/repository/files/${encodeURIComponent(n.path)}/raw`);s.searchParams.set("ref",n.ref);let o=await this.config.request({url:s.toString(),headers:R(e.token||this.config.token)});return{data:new Blob([o.body])}}async getCommentsForPullRequest(n,e={}){let t=_(n.repo),{page:s,perPage:o}=On(n.cursor,L),i=new URL(`${A(this.config,e)}/projects/${encodeURIComponent(t)}/merge_requests/${n.pullRequestNumber}/notes`);i.searchParams.set("page",s.toString()),i.searchParams.set("per_page",o.toString()),i.searchParams.set("sort","asc"),i.searchParams.set("order_by","created_at");let a=await this.config.request({url:i.toString(),headers:R(e.token||this.config.token)}),u=this.getIsSelfHosted(e),l=this.config.baseUrl??e.baseUrl,p={namespace:n.repo.namespace,name:n.repo.name,mergeRequestIid:n.pullRequestNumber},d=a.body.filter(m=>!m.system&&!m.position).map(m=>Ot(m,u,l,p)),c=!!a.headers["x-next-page"],g=c?Tn({page:s+1,perPage:o}):null;return{data:d,pageInfo:{endCursor:g,hasNextPage:c}}}async getReviewsForPullRequest(n,e={}){let t=_(n.repo),s=this.getIsSelfHosted(e),o=this.config.baseUrl??e.baseUrl,i=R(e.token||this.config.token),a=A(this.config,e),u=encodeURIComponent(t),[l,p]=await Promise.all([this.config.request({url:`${a}/projects/${u}/merge_requests/${n.pullRequestId}/approvals`,headers:i}),this.fetchAllMergeRequestDiscussions(t,n.pullRequestId,e)]),d=(l.body.approved_by??[]).map(m=>m?.user).filter(m=>!!m).map(m=>{let h=Nr(m,s,o),y=`approval-${m.id}`;return{author:h,body:"",createdAt:l.body.updated_at?new Date(l.body.updated_at):null,id:y,graphQLId:y,reviewComments:[],url:l.body.web_url??""}}),c={namespace:n.repo.namespace,name:n.repo.name,mergeRequestIid:n.pullRequestId},g=p.filter(m=>m.notes.some(h=>!h.system&&!!h.position)).map(m=>{let h=m.notes.filter(w=>!w.system),f=h.filter(w=>!!w.position)[0];if(!f)return null;let P=h.filter(w=>w.id!==f.id).map(w=>Ot(w,s,o,c)),D={...Ot(f,s,o,c),diffLines:[],filename:f.position?.new_path??f.position?.old_path??"",line:f.position?.new_line??f.position?.old_line??null,startLine:f.position?.line_range?.start?.new_line??null,side:xn(f.position),isOutdated:!1,isResolved:!!m.resolved,threadId:m.id,replies:P};return{author:f.author?Nr(f.author,s,o):null,body:f.body??"",createdAt:f.created_at?new Date(f.created_at):null,id:m.id,graphQLId:m.id,reviewComments:[D],url:""}}).filter(m=>m!==null);return{data:[...d,...g]}}async getPullRequestDiff(n,e={}){let t=_(n.repo),s=encodeURIComponent(t),o=A(this.config,e);return(await this.fetchAllPagedGitLabREST(`${o}/projects/${s}/merge_requests/${n.pullRequestId}/diffs`,e)).map(kn).join("")}async getMergeBase(n,e={}){let t=_(n.repo),s=new URL(`${A(this.config,e)}/projects/${encodeURIComponent(t)}/repository/merge_base`);s.searchParams.append("refs[]",n.base),s.searchParams.append("refs[]",n.head);let i=(await this.config.request({url:s.toString(),headers:R(e.token||this.config.token)})).body?.id;if(!i)throw new Error("No merge base found between the specified commits.");return{data:i}}async fetchAllMergeRequestDiscussions(n,e,t){let s=A(this.config,t),o=encodeURIComponent(n);return this.fetchAllPagedGitLabREST(`${s}/projects/${o}/merge_requests/${e}/discussions`,t)}async fetchAllPagedGitLabREST(n,e){let t=R(e.token||this.config.token),s=[],o=1,i=50;for(;o<=i;){let a=new URL(n);a.searchParams.set("page",o.toString()),a.searchParams.set("per_page",L.toString());let u=await this.config.request({url:a.toString(),headers:t});s.push(...u.body);let l=u.headers["x-next-page"];if(!l)break;let p=parseInt(`${l}`,10);if(Number.isNaN(p))break;o=p}return s}async addCommentToPullRequest(n,e={}){let{pullRequest:t,comment:s}=n;if(!s||s.trim()==="")throw new Error("GitLab requires a comment when adding a comment to a pull request.");let o=`${t.repository.owner.login}/${t.repository.name}`,i=`${A(this.config,e)}/projects/${encodeURIComponent(o)}/merge_requests/${t.number}/notes`;if(!(await this.config.request({method:"POST",url:i,headers:{...R(e.token||this.config.token),"Content-Type":"application/json"},body:JSON.stringify({body:s})})).body?.id)throw new Error("Could not add comment to pull request")}async addInlineCommentToPullRequest(n,e={}){let{pullRequest:t,comment:s,path:o,line:i,side:a="RIGHT",threadId:u}=n;if(!s?.trim())throw new Error("GitLab requires a comment when adding an inline comment to a pull request.");let l=`${t.repository.owner.login}/${t.repository.name}`,p=encodeURIComponent(l),d=A(this.config,e),c={...R(e.token||this.config.token),"Content-Type":"application/json"};if(u){let P=await this.config.request({method:"POST",url:`${d}/projects/${p}/merge_requests/${t.number}/discussions/${encodeURIComponent(u)}/notes`,headers:c,body:JSON.stringify({body:s})});return P.body?.id!=null?_t(t.repository.owner.login,t.repository.name,t.number,P.body.id):void 0}if(!o?.trim())throw new Error("GitLab requires a file path when adding an inline comment to a pull request.");if(!Number.isInteger(i)||i<1)throw new Error("GitLab requires a positive line number when adding an inline comment to a pull request.");if(a!=="LEFT"&&a!=="RIGHT")throw new Error('GitLab requires side to be either "LEFT" or "RIGHT".');let m=(await this.config.request({url:`${d}/projects/${p}/merge_requests/${t.number}`,headers:R(e.token||this.config.token)})).body?.diff_refs;if(!m?.base_sha||!m?.start_sha||!m?.head_sha)throw new Error("Could not resolve merge request diff refs required to create an inline comment");let h={position_type:"text",base_sha:m.base_sha,start_sha:m.start_sha,head_sha:m.head_sha,new_path:o,old_path:o};a==="RIGHT"?h.new_line=i:h.old_line=i;let f=(await this.config.request({method:"POST",url:`${d}/projects/${p}/merge_requests/${t.number}/discussions`,headers:c,body:JSON.stringify({body:s,position:h})})).body?.notes?.[0]?.id;return f!=null?_t(t.repository.owner.login,t.repository.name,t.number,f):void 0}getNoteUrl(n,e){if(!n)throw new Error('GitLab requires "commentId" for this function.');let{namespace:t,name:s,mergeRequestIid:o,noteId:i}=Nn(n);return`${A(this.config,e)}/projects/${encodeURIComponent(`${t}/${s}`)}/merge_requests/${o}/notes/${i}`}async deleteNote(n,e){await this.config.request({method:"DELETE",url:this.getNoteUrl(n,e),headers:R(e.token||this.config.token)})}async deleteComment(n,e={}){await this.deleteNote(n.commentId,e)}async deleteInlineComment(n,e={}){await this.deleteNote(n.commentId,e)}async editNote(n,e,t){if(!e?.trim())throw new Error("GitLab requires a body when editing a comment.");if(!(await this.config.request({method:"PUT",url:this.getNoteUrl(n,t),headers:{...R(t.token||this.config.token),"Content-Type":"application/json"},body:JSON.stringify({body:e})})).body?.id)throw new Error("Could not edit comment")}async editComment(n,e={}){await this.editNote(n.commentId,n.body,e)}async editInlineComment(n,e={}){await this.editNote(n.commentId,n.body,e)}async resolveReviewThread(n,e={}){await this.setReviewThreadResolved(n,!0,e)}async unresolveReviewThread(n,e={}){await this.setReviewThreadResolved(n,!1,e)}async setReviewThreadResolved(n,e,t){if(!n.repo||n.pullRequestNumber==null)throw new Error("GitLab requires input.repo and input.pullRequestNumber to locate the discussion to (un)resolve.");if(!n.threadId)throw new Error("GitLab requires input.threadId to (un)resolve a discussion.");let s=_(n.repo),o=new URL(`${A(this.config,t)}/projects/${encodeURIComponent(s)}/merge_requests/${n.pullRequestNumber}/discussions/${encodeURIComponent(n.threadId)}`);o.searchParams.set("resolved",e?"true":"false"),await this.config.request({url:o.toString(),method:"PUT",headers:R(t.token||this.config.token)})}async approvePullRequest(n,e={}){let{pullRequest:t,comment:s}=n,o=`${t.repository.owner.login}/${t.repository.name}`,i=A(this.config,e),a=encodeURIComponent(o),u=R(e.token||this.config.token);await this.config.request({url:`${i}/projects/${a}/merge_requests/${t.number}/approve`,method:"POST",headers:u}),s&&s.trim()!==""&&await this.postMergeRequestNote(o,t.number,s,e)}async commentOnPullRequest(n,e={}){let{pullRequest:t,comment:s}=n;if(!s||s.trim()==="")throw new Error("GitLab requires a comment when commenting on a pull request.");let o=`${t.repository.owner.login}/${t.repository.name}`;await this.postMergeRequestNote(o,t.number,s,e)}async requestPullRequestChanges(n,e={}){let{pullRequest:t,comment:s}=n;if(!s||s.trim()==="")throw new Error("GitLab requires a comment when requesting changes on a pull request.");let o=`${t.repository.owner.login}/${t.repository.name}`;if(!await this.tryRequestChangesMutation(o,t.number,e)){let u=`${A(this.config,e)}/projects/${encodeURIComponent(o)}/merge_requests/${t.number}`,l=R(e.token||this.config.token);(await this.config.request({url:`${u}/approvals`,method:"GET",headers:l})).body?.user_has_approved&&await this.config.request({url:`${u}/unapprove`,method:"POST",headers:l})}await this.postMergeRequestNote(o,t.number,s,e)}async tryRequestChangesMutation(n,e,t){let s=`mutation MergeRequestRequestChanges($fullPath: ID!, $pullRequestId: String!) {
1363
+ `,variables:{fullPath:t,iid:n.number.toString()}},e)).body.data?.project,i=o?.mergeRequest;if(!o||!i)return{data:null};let a=ve(o),u=i.sourceProject?ve(i.sourceProject):null;return{data:Gt(i,a,u,this.getIsSelfHosted(e),this.config.baseUrl??e.baseUrl)}}getMergeRequestUrl(n,e,t){let s=_(n);return`${A(this.config,t)}/projects/${encodeURIComponent(s)}/merge_requests/${e}`}async getPullRequestDescription(n,e={}){try{return{data:{description:(await this.config.request({url:this.getMergeRequestUrl(n.repo,n.number,e),headers:R(e.token||this.config.token)})).body?.description??""}}}catch{return{data:{description:null}}}}async setPullRequestDescription(n,e={}){return{data:{description:(await this.config.request({method:"PUT",url:this.getMergeRequestUrl(n.repo,n.number,e),headers:{...R(e.token||this.config.token),"Content-Type":"application/json"},body:JSON.stringify({description:n.description})})).body?.description??n.description}}}async getFileContents(n,e={}){let t=_(n.repo),s=new URL(`${A(this.config,e)}/projects/${encodeURIComponent(t)}/repository/files/${encodeURIComponent(n.path)}/raw`);s.searchParams.set("ref",n.ref);let o=await this.config.request({url:s.toString(),headers:R(e.token||this.config.token)});return{data:new Blob([o.body])}}async getCommentsForPullRequest(n,e={}){let t=_(n.repo),{page:s,perPage:o}=xn(n.cursor,L),i=new URL(`${A(this.config,e)}/projects/${encodeURIComponent(t)}/merge_requests/${n.pullRequestNumber}/notes`);i.searchParams.set("page",s.toString()),i.searchParams.set("per_page",o.toString()),i.searchParams.set("sort","asc"),i.searchParams.set("order_by","created_at");let a=await this.config.request({url:i.toString(),headers:R(e.token||this.config.token)}),u=this.getIsSelfHosted(e),l=this.config.baseUrl??e.baseUrl,p={namespace:n.repo.namespace,name:n.repo.name,mergeRequestIid:n.pullRequestNumber},d=a.body.filter(m=>!m.system&&!m.position).map(m=>Ot(m,u,l,p)),c=!!a.headers["x-next-page"],g=c?_n({page:s+1,perPage:o}):null;return{data:d,pageInfo:{endCursor:g,hasNextPage:c}}}async getReviewsForPullRequest(n,e={}){let t=_(n.repo),s=this.getIsSelfHosted(e),o=this.config.baseUrl??e.baseUrl,i=R(e.token||this.config.token),a=A(this.config,e),u=encodeURIComponent(t),[l,p]=await Promise.all([this.config.request({url:`${a}/projects/${u}/merge_requests/${n.pullRequestId}/approvals`,headers:i}),this.fetchAllMergeRequestDiscussions(t,n.pullRequestId,e)]),d=(l.body.approved_by??[]).map(m=>m?.user).filter(m=>!!m).map(m=>{let h=Nr(m,s,o),y=`approval-${m.id}`;return{author:h,body:"",createdAt:l.body.updated_at?new Date(l.body.updated_at):null,id:y,graphQLId:y,reviewComments:[],url:l.body.web_url??""}}),c={namespace:n.repo.namespace,name:n.repo.name,mergeRequestIid:n.pullRequestId},g=p.filter(m=>m.notes.some(h=>!h.system&&!!h.position)).map(m=>{let h=m.notes.filter(w=>!w.system),f=h.filter(w=>!!w.position)[0];if(!f)return null;let P=h.filter(w=>w.id!==f.id).map(w=>Ot(w,s,o,c)),D={...Ot(f,s,o,c),diffLines:[],filename:f.position?.new_path??f.position?.old_path??"",line:f.position?.new_line??f.position?.old_line??null,startLine:f.position?.line_range?.start?.new_line??null,side:Nn(f.position),isOutdated:!1,isResolved:!!m.resolved,threadId:m.id,replies:P};return{author:f.author?Nr(f.author,s,o):null,body:f.body??"",createdAt:f.created_at?new Date(f.created_at):null,id:m.id,graphQLId:m.id,reviewComments:[D],url:""}}).filter(m=>m!==null);return{data:[...d,...g]}}async getPullRequestDiff(n,e={}){let t=_(n.repo),s=encodeURIComponent(t),o=A(this.config,e);return(await this.fetchAllPagedGitLabREST(`${o}/projects/${s}/merge_requests/${n.pullRequestId}/diffs`,e,{perPage:An,maxPages:Gn})).map(Fn).join("")}async getMergeBase(n,e={}){let t=_(n.repo),s=new URL(`${A(this.config,e)}/projects/${encodeURIComponent(t)}/repository/merge_base`);s.searchParams.append("refs[]",n.base),s.searchParams.append("refs[]",n.head);let i=(await this.config.request({url:s.toString(),headers:R(e.token||this.config.token)})).body?.id;if(!i)throw new Error("No merge base found between the specified commits.");return{data:i}}async fetchAllMergeRequestDiscussions(n,e,t){let s=A(this.config,t),o=encodeURIComponent(n);return this.fetchAllPagedGitLabREST(`${s}/projects/${o}/merge_requests/${e}/discussions`,t)}async fetchAllPagedGitLabREST(n,e,{perPage:t=L,maxPages:s=50}={}){let o=R(e.token||this.config.token),i=[],a=1;for(;a<=s;){let u=new URL(n);u.searchParams.set("page",a.toString()),u.searchParams.set("per_page",t.toString());let l=await this.config.request({url:u.toString(),headers:o});i.push(...l.body);let p=l.headers["x-next-page"];if(!p)break;let d=parseInt(`${p}`,10);if(Number.isNaN(d)||d<=a)break;a=d}return i}async addCommentToPullRequest(n,e={}){let{pullRequest:t,comment:s}=n;if(!s||s.trim()==="")throw new Error("GitLab requires a comment when adding a comment to a pull request.");let o=`${t.repository.owner.login}/${t.repository.name}`,i=`${A(this.config,e)}/projects/${encodeURIComponent(o)}/merge_requests/${t.number}/notes`;if(!(await this.config.request({method:"POST",url:i,headers:{...R(e.token||this.config.token),"Content-Type":"application/json"},body:JSON.stringify({body:s})})).body?.id)throw new Error("Could not add comment to pull request")}async addInlineCommentToPullRequest(n,e={}){let{pullRequest:t,comment:s,path:o,line:i,side:a="RIGHT",threadId:u}=n;if(!s?.trim())throw new Error("GitLab requires a comment when adding an inline comment to a pull request.");let l=`${t.repository.owner.login}/${t.repository.name}`,p=encodeURIComponent(l),d=A(this.config,e),c={...R(e.token||this.config.token),"Content-Type":"application/json"};if(u){let P=await this.config.request({method:"POST",url:`${d}/projects/${p}/merge_requests/${t.number}/discussions/${encodeURIComponent(u)}/notes`,headers:c,body:JSON.stringify({body:s})});return P.body?.id!=null?_t(t.repository.owner.login,t.repository.name,t.number,P.body.id):void 0}if(!o?.trim())throw new Error("GitLab requires a file path when adding an inline comment to a pull request.");if(!Number.isInteger(i)||i<1)throw new Error("GitLab requires a positive line number when adding an inline comment to a pull request.");if(a!=="LEFT"&&a!=="RIGHT")throw new Error('GitLab requires side to be either "LEFT" or "RIGHT".');let m=(await this.config.request({url:`${d}/projects/${p}/merge_requests/${t.number}`,headers:R(e.token||this.config.token)})).body?.diff_refs;if(!m?.base_sha||!m?.start_sha||!m?.head_sha)throw new Error("Could not resolve merge request diff refs required to create an inline comment");let h={position_type:"text",base_sha:m.base_sha,start_sha:m.start_sha,head_sha:m.head_sha,new_path:o,old_path:o};a==="RIGHT"?h.new_line=i:h.old_line=i;let f=(await this.config.request({method:"POST",url:`${d}/projects/${p}/merge_requests/${t.number}/discussions`,headers:c,body:JSON.stringify({body:s,position:h})})).body?.notes?.[0]?.id;return f!=null?_t(t.repository.owner.login,t.repository.name,t.number,f):void 0}getNoteUrl(n,e){if(!n)throw new Error('GitLab requires "commentId" for this function.');let{namespace:t,name:s,mergeRequestIid:o,noteId:i}=jn(n);return`${A(this.config,e)}/projects/${encodeURIComponent(`${t}/${s}`)}/merge_requests/${o}/notes/${i}`}async deleteNote(n,e){await this.config.request({method:"DELETE",url:this.getNoteUrl(n,e),headers:R(e.token||this.config.token)})}async deleteComment(n,e={}){await this.deleteNote(n.commentId,e)}async deleteInlineComment(n,e={}){await this.deleteNote(n.commentId,e)}async editNote(n,e,t){if(!e?.trim())throw new Error("GitLab requires a body when editing a comment.");if(!(await this.config.request({method:"PUT",url:this.getNoteUrl(n,t),headers:{...R(t.token||this.config.token),"Content-Type":"application/json"},body:JSON.stringify({body:e})})).body?.id)throw new Error("Could not edit comment")}async editComment(n,e={}){await this.editNote(n.commentId,n.body,e)}async editInlineComment(n,e={}){await this.editNote(n.commentId,n.body,e)}async resolveReviewThread(n,e={}){await this.setReviewThreadResolved(n,!0,e)}async unresolveReviewThread(n,e={}){await this.setReviewThreadResolved(n,!1,e)}async setReviewThreadResolved(n,e,t){if(!n.repo||n.pullRequestNumber==null)throw new Error("GitLab requires input.repo and input.pullRequestNumber to locate the discussion to (un)resolve.");if(!n.threadId)throw new Error("GitLab requires input.threadId to (un)resolve a discussion.");let s=_(n.repo),o=new URL(`${A(this.config,t)}/projects/${encodeURIComponent(s)}/merge_requests/${n.pullRequestNumber}/discussions/${encodeURIComponent(n.threadId)}`);o.searchParams.set("resolved",e?"true":"false"),await this.config.request({url:o.toString(),method:"PUT",headers:R(t.token||this.config.token)})}async approvePullRequest(n,e={}){let{pullRequest:t,comment:s}=n,o=`${t.repository.owner.login}/${t.repository.name}`,i=A(this.config,e),a=encodeURIComponent(o),u=R(e.token||this.config.token);await this.config.request({url:`${i}/projects/${a}/merge_requests/${t.number}/approve`,method:"POST",headers:u}),s&&s.trim()!==""&&await this.postMergeRequestNote(o,t.number,s,e)}async commentOnPullRequest(n,e={}){let{pullRequest:t,comment:s}=n;if(!s||s.trim()==="")throw new Error("GitLab requires a comment when commenting on a pull request.");let o=`${t.repository.owner.login}/${t.repository.name}`;await this.postMergeRequestNote(o,t.number,s,e)}async requestPullRequestChanges(n,e={}){let{pullRequest:t,comment:s}=n;if(!s||s.trim()==="")throw new Error("GitLab requires a comment when requesting changes on a pull request.");let o=`${t.repository.owner.login}/${t.repository.name}`;if(!await this.tryRequestChangesMutation(o,t.number,e)){let u=`${A(this.config,e)}/projects/${encodeURIComponent(o)}/merge_requests/${t.number}`,l=R(e.token||this.config.token);(await this.config.request({url:`${u}/approvals`,method:"GET",headers:l})).body?.user_has_approved&&await this.config.request({url:`${u}/unapprove`,method:"POST",headers:l})}await this.postMergeRequestNote(o,t.number,s,e)}async tryRequestChangesMutation(n,e,t){let s=`mutation MergeRequestRequestChanges($fullPath: ID!, $pullRequestId: String!) {
1364
1364
  mergeRequestRequestChanges(input: { projectPath: $fullPath, iid: $pullRequestId }) {
1365
1365
  errors
1366
1366
  mergeRequest {
1367
1367
  id
1368
1368
  }
1369
1369
  }
1370
- }`,o=await v(this.config,{query:s,variables:{fullPath:n,pullRequestId:e.toString()}},t),i=o.body.errors;if(i?.length){if(i.some(Cn))return!1;throw new Error(`Could not request pull request changes: ${Se(i)}`)}let a=o.body.data?.mergeRequestRequestChanges;if(a?.errors&&a.errors.length>0)throw new Error(`Could not request pull request changes: ${a.errors.join(", ")}`);if(!a?.mergeRequest?.id)throw new Error("Could not request pull request changes");return!0}async postMergeRequestNote(n,e,t,s){let o=A(this.config,s),i=encodeURIComponent(n),a=R(s.token||this.config.token);await this.config.request({url:`${o}/projects/${i}/merge_requests/${e}/notes`,method:"POST",headers:{...a,"Content-Type":"application/json"},body:JSON.stringify({body:t})})}};var Fn="https://api.atlassian.com/ex/jira",He=100,Qr=r=>{if(!r||r.length===0)return"statusCategory != Done";let n=new Set(r),e=n.has("OPEN"),t=n.has("CLOSED");return e&&t?null:t?"statusCategory = Done":"statusCategory != Done"},Bt=["assignee","comment","summary","created","creator","updated","votes","issuetype","status","labels","components","project","fixVersions","description"],Br="/rest/api/2/search/jql",Mr="/rest/api/2/search",Mt=(r,n,e,t)=>{let s=r.fields.assignee,o=!t,i=(r.fields[n?.Sprint??""]??[]).filter(a=>typeof a=="object");return{id:r.id,commentCount:r.fields.comment.comments.length,number:r.key,title:r.fields.summary,url:e?`${e}/browse/${r.key}`:null,closedDate:null,createdDate:new Date(r.fields.created),author:We(r.fields.creator,e,o),updatedDate:new Date(r.fields.updated),assignees:s?[We(s,e,o)]:[],description:r.fields.description,repository:null,project:{name:r.fields.project.name,resourceId:t??null,key:r.fields.project.key,namespace:null,id:r.fields.project.id},state:Mn(r.fields.status),statusTransitions:r.transitions?.map(jn)??[],components:r.fields.components?.map(Qn)??[],type:r.fields.issuetype.name,upvoteCount:r.fields.votes?.votes||0,labels:r.fields.labels?.map(a=>({color:null,description:null,id:null,name:a}))??[],sprints:i.map(zn),fixVersions:r.fields.fixVersions.map(Hn)}},jn=r=>{let n;switch(r.to.statusCategory.name){case"To Do":n="TO_DO";break;case"In Progress":n="IN_PROGRESS";break;default:n="DONE";break}return{name:r.name,id:r.id,to:{id:r.to.id,name:r.to.name,color:r.to.statusCategory.colorName,category:n}}},Qn=r=>({description:r.description??null,id:r.id,name:r.name}),Bn=(r,n,e)=>e&&r.name?`${n}/secure/ViewProfile.jspa?name=${encodeURIComponent(r.name)}`:`${n}/jira/people/${r.accountId}`,We=(r,n,e)=>({id:(e?r.key:r.accountId)??"",name:r.displayName,email:r.emailAddress,avatarUrl:r.avatarUrls["48x48"],username:r.displayName,url:Bn(r,n,e)}),Mn=r=>{let n;switch(r.statusCategory.name){case"To Do":n="TO_DO";break;case"In Progress":n="IN_PROGRESS";break;default:n="DONE";break}return{id:r.id,name:r.name,color:r.statusCategory.colorName,category:n}},zn=r=>({id:r.id.toString(),name:r.name,isActive:r.state==="active",startDate:r.startDate?new Date(r.startDate):null,endDate:r.endDate?new Date(r.endDate):null,completedDate:r.completeDate?new Date(r.completeDate):null}),Hn=r=>({id:r.id,description:r.description,name:r.name,archived:r.archived,released:r.released,releaseDate:r.releaseDate?new Date(r.releaseDate):null}),re=(r,n,e)=>e?`${n.baseUrl||Fn}/${e}`:`${n?.baseUrl||r.baseUrl}`,Je=async(r,n,e={})=>{let{resourceId:t}=n;return(await r.request({url:`${re(r,e,t)}/rest/api/2/field`,headers:R(e.token||r.token)})).body},Ve=async(r,n,e,t={})=>{let{number:s,resourceId:o,fields:i}=n||{},a=await r.request({url:`${re(r,t,o)}/rest/api/2/issue/${s}?fields=${Bt.join(",")}&expand=transitions`,headers:R(t.token||r.token)});return{data:Mt(a.body,i,e,o)}},Ke=async(r,n,e,t={})=>{let{cursor:s,resourceId:o,labelNames:i,fields:a}=n||{},u=["statusCategory != Done",`(creator = currentUser() OR assignee = currentUser()
1371
- OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUser())`];i&&i.forEach(f=>u.push(`labels = "${f}"`));let l=`${u.join(" AND ")} ORDER BY updated DESC`,p=!o,d=p?Mr:Br,c=new URL(`${re(r,t,o)}${d}`);c.searchParams.set("jql",l),c.searchParams.set("maxResults",He.toString()),c.searchParams.set("fields",Bt.join(",")),c.searchParams.set("expand","transitions"),s&&(p?c.searchParams.set("startAt",s):c.searchParams.set("nextPageToken",s));let g=await r.request({url:c.toString(),headers:R(t.token||r.token)}),m=g.body.issues.map(f=>Mt(f,a,e,o)),h=!1,y="";return p?(h=m.length==He,y=(parseInt(s??"0",10)+m.length).toString()):(h=!!g.body.nextPageToken,y=g.body.nextPageToken??null),{data:m,pageInfo:{hasNextPage:h,endCursor:y}}},zr=async(r,n,e,t={})=>{let{cursor:s,resourceId:o,jql:i,fields:a}=n||{},u=U(n?.pageSize,{fallback:He,max:He}),l=[...Bt],p=a?.Sprint;p&&l.push(p);let d=!o,c=d?Mr:Br,g=new URL(`${re(r,t,o)}${c}`);g.searchParams.set("jql",i.join(" AND ")),g.searchParams.set("maxResults",u.toString()),g.searchParams.set("fields",l.join(",")),g.searchParams.set("expand","transitions"),s&&(d?g.searchParams.set("startAt",s):g.searchParams.set("nextPageToken",s));let m=await r.request({url:g.toString(),headers:R(t.token||r.token)}),h=m.body.issues.map(P=>Mt(P,a,e,o)),y=!1,f="";if(d){let P=parseInt(s??"0",10),S=typeof m.body.startAt=="number"?m.body.startAt:Number.isNaN(P)?0:P,D=m.body.total;y=typeof D=="number"?S+h.length<D:h.length===u,f=(S+h.length).toString()}else y=!!m.body.nextPageToken,f=m.body.nextPageToken??null;return{data:h,pageInfo:{hasNextPage:y,endCursor:f}}},Xe=async(r,n,e,t={})=>{let{assigneeLogins:s,authorLogin:o,mentionLogin:i,labelNames:a,cursor:u,projectKey:l,resourceId:p,fields:d}=n||{},c=[`project = "${l}"`],g=Qr(n.states);return g&&c.push(g),o&&c.push(`creator in ("${o}")`),s&&s.length!==0&&c.push(`assignee in ("${s.join('", "')}")`),i&&c.push(`comment ~ "${i}"`),a&&a.forEach(m=>c.push(`labels = "${m}"`)),zr(r,{resourceId:p,jql:c,cursor:u,fields:d,pageSize:n.pageSize},e,t)},Ze=async(r,n,e,t={})=>{let{assigneeLogins:s,authorLogin:o,mentionLogin:i,labelNames:a,cursor:u,projectKeys:l,resourceId:p,fields:d}=n||{},g=["("+l.map(h=>`project = "${h}"`).join(" OR ")+")"],m=Qr(n.states);return m&&g.push(m),o&&g.push(`creator in ("${o}")`),s&&s.length!==0&&g.push(`assignee in ("${s.join('", "')}")`),i&&g.push(`comment ~ "${i}"`),a&&a.forEach(h=>g.push(`labels = "${h}"`)),zr(r,{resourceId:p,jql:g,fields:d,cursor:u,pageSize:n.pageSize},e,t)},Ye=async(r,n,e={})=>{let{issue:t,labels:s}=n;if(!t.project)throw new Error('Jira requires a "project" for this function.');let o={fields:{labels:s.map(i=>i.name)}};await r.request({method:"PUT",url:`${re(r,e,t.project.resourceId??void 0)}/rest/api/2/issue/${t.id}`,body:JSON.stringify(o),headers:{...R(e.token||r.token),"Content-Type":"application/json"}})},et=async(r,n,e={})=>{let{issue:t,components:s}=n;if(!t.project)throw new Error('Jira requires a "project" for this function.');let o={fields:{components:s.map(i=>({id:i.id}))}};await r.request({method:"PUT",url:`${re(r,e,t.project.resourceId??void 0)}/rest/api/2/issue/${t.id}`,body:JSON.stringify(o),headers:{...R(e.token||r.token),"Content-Type":"application/json"}})},tt=async(r,n,e={})=>{let{issue:t,status:s}=n;if(!t.project)throw new Error('Jira requires a "project" for this function.');if(!s.id)throw new Error('Jira requires a status "id" for this function.');let o={transition:{id:s.id}};await r.request({method:"POST",url:`${re(r,e,t.project.resourceId??void 0)}/rest/api/2/issue/${t.id}/transitions`,body:JSON.stringify(o),headers:{...R(e.token||r.token),"Content-Type":"application/json"}})},rt=async(r,n,e={})=>{let{resourceId:t,projectIdOrKey:s}=n,o=new URL(`${re(r,e,t)}/rest/api/2/project/${s}/components`);return{data:(await r.request({url:o.toString(),headers:R(e.token||r.token)})).body}};var Ce="https://api.atlassian.com/ex/jira",zt=100,Re=class extends j{constructor(){super(...arguments);this._resourceUrlCache={};this._issueFieldsCache={}}async getIssueFieldsForResource(e,t={}){if(!this._issueFieldsCache[e.resourceId]){let s=await Je(this.config,e,t);this._issueFieldsCache[e.resourceId]=s.reduce((o,i)=>({...o,[i.name]:i.id}),{})}return this._issueFieldsCache[e.resourceId]??null}async getResourceUrl(e,t={}){let s=t.token||this.config.token;if(!s)return null;let o=this._resourceUrlCache[s];return o?o[e.resourceId]??null:(await this.getJiraResourcesForCurrentUser(t),this._resourceUrlCache[s]?.[e.resourceId]??null)}async getCurrentUserForResource(e,t={}){let s=await this.getResourceUrl({resourceId:e.resourceId},t),o=await this.config.request({url:`${t.baseUrl||Ce}/${e.resourceId}/rest/api/2/myself`,headers:R(t.token||this.config.token)});return{data:{name:o.body.displayName,email:o.body.emailAddress,avatarUrl:o.body.avatarUrls["48x48"],id:o.body.accountId,username:o.body.displayName,url:s?`${s}/jira/people/${o.body.accountId}`:null}}}async getJiraResourcesForCurrentUser(e={}){let t=await this.config.request({url:`${e.baseUrl||"https://api.atlassian.com/"}/oauth/token/accessible-resources`,headers:R(e.token||this.config.token)}),s=e.token||this.config.token,o=s?this._resourceUrlCache[s]||{}:void 0,i=t.body.map(a=>(o&&(o[a.id]=a.url),{avatarUrl:a.avatarUrl,id:a.id,name:a.name,url:a.url}));return s&&(this._resourceUrlCache[s]=o),{data:i}}async getJiraProjectsForResource(e,t={}){let s=new URL(`${t.baseUrl||Ce}/${e.resourceId}/rest/api/2/project/search`);s.searchParams.set("maxResults",zt.toString()),e.cursor&&s.searchParams.set("startAt",e.cursor);let o=await this.config.request({url:s.toString(),headers:R(t.token||this.config.token)});return{pageInfo:{hasNextPage:o.body.values.length!==0,endCursor:(o.body.startAt+o.body.values.length).toString()},data:o.body.values.map(i=>({id:i.id,key:i.key,name:i.name,resourceId:e.resourceId}))}}async getJiraProjectsForResources(e,t={}){let s=[];return await Promise.all(e.resourceIds.map(async o=>{try{return await er(i=>this.getJiraProjectsForResource({resourceId:o,cursor:i},t))}catch{return[]}})).then((...o)=>{o.forEach(i=>{s=s.concat(...i)})}),{data:s}}async getAccountsForJiraProject(e,t={}){let{resourceId:s,projectKey:o,cursor:i}=e,a=await this.getResourceUrl({resourceId:s},t),u=new URL(`${t.baseUrl||Ce}/${s}/rest/api/2/user/assignable/search`);u.searchParams.set("maxResults",zt.toString()),i&&u.searchParams.set("startAt",i),u.searchParams.set("project",o);let l=await this.config.request({url:u.toString(),headers:R(t.token||this.config.token)});return{pageInfo:{hasNextPage:l.body.length!==0,endCursor:((i?parseInt(i):0)+l.body.length).toString()},data:l.body.filter(p=>p.accountType!=="app"&&p.active).map(p=>We(p,a,!1))}}async getComponentsForJiraProject(e,t={}){return await rt(this.config,e,t)}async getIssue(e,t={}){let s=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await Ve(this.config,{...e,fields:s},o,t)}async getIssuesForProject(e,t={}){let s=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await Xe(this.config,{...e,fields:s},o,t)}async getIssuesForProjects(e,t={}){let s=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await Ze(this.config,{...e,fields:s},o,t)}async getIssuesForResourceForCurrentUser(e,t={}){let s=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await Ke(this.config,{...e,fields:s},o,t)}async setIssueStatus(e,t={}){await tt(this.config,e,t)}async setIssueAssignee(e,t={}){let{issue:s,assignee:o}=e;if(!s.project)throw new Error('Jira Cloud requires a "project" for this function.');if(!s.project.resourceId)throw new Error('Jira Cloud requires a project "resourceId" for this function.');let i={accountId:o?.id};await this.config.request({method:"PUT",url:`${t.baseUrl||Ce}/${s.project.resourceId}/rest/api/2/issue/${s.id}/assignee`,body:JSON.stringify(i),headers:{...R(t.token||this.config.token),"Content-Type":"application/json"}})}async setIssueComponents(e,t={}){await et(this.config,e,t)}async setIssueLabels(e,t={}){await Ye(this.config,e,t)}async getLabelsForResource(e,t={}){let{resourceId:s,cursor:o}=e,i=new URL(`${t.baseUrl||Ce}/${s}/rest/api/2/label`);i.searchParams.set("maxResults",zt.toString()),o&&i.searchParams.set("startAt",o);let a=await this.config.request({url:i.toString(),headers:R(t.token||this.config.token)});return{pageInfo:{hasNextPage:!a.body.isLast,endCursor:(a.body.startAt+a.body.values.length).toString()},data:a.body.values.map(u=>({color:null,description:null,id:null,name:u}))}}};var Ie=class extends N{constructor(){super(...arguments);this._issueFieldsCache={}}async getIssueFieldsForResource(e={}){let t=e?.baseUrl||this.config.baseUrl||"";if(!this._issueFieldsCache[t]){let s=await Je(this.config,{},e);this._issueFieldsCache[t]=s.reduce((o,i)=>({...o,[i.name]:i.id}),{})}return this._issueFieldsCache[t]??null}async getCurrentUser(e={}){let t=await this.config.request({url:`${e?.baseUrl||this.config.baseUrl}/rest/api/2/myself`,headers:R(e?.token||this.config.token)});return{data:{name:t.body.displayName,email:t.body.emailAddress,avatarUrl:t.body.avatarUrls["48x48"],id:t.body.key,username:t.body.displayName,url:null}}}async getJiraProjects(e={}){return{data:(await this.config.request({url:`${e?.baseUrl||this.config.baseUrl}/rest/api/2/project`,headers:R(e?.token||this.config.token)})).body.map(s=>({id:s.id,name:s.name}))}}async getIssue(e,t={}){let s=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!s)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await Ve(this.config,{...e,fields:o},s,t)}async getIssuesForProject(e,t={}){let s=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!s)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await Xe(this.config,{...e,fields:o},s,t)}async getIssuesForProjects(e,t={}){let s=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!s)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await Ze(this.config,{...e,fields:o},s,t)}async getIssuesForResourceForCurrentUser(e,t={}){let s=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!s)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await Ke(this.config,{...e,fields:o},s,t)}async setIssueStatus(e,t={}){await tt(this.config,e,t)}async setIssueLabels(e,t={}){await Ye(this.config,e,t)}async setIssueComponents(e,t={}){await et(this.config,e,t)}async getLabels(e={}){return{data:(await this.config.request({url:`${e?.baseUrl||this.config.baseUrl}/rest/api/2/jql/autocompletedata/suggestions?fieldName=labels`,headers:R(e.token||this.config.token)})).body.results.map(({displayName:s})=>({color:null,description:null,id:null,name:s}))}}async getComponentsForJiraProject(e,t={}){return await rt(this.config,e,t)}};var H="https://api.trello.com",Wn=1e3,W=(r,n)=>({...R(n),Authorization:`OAuth oauth_consumer_key="${r}", oauth_token="${n}"`}),Jn=r=>({id:r.id,username:r.username,url:r.url,name:r.fullName,email:r.email,avatarUrl:r.avatarUrl}),Vn=(r,n)=>{let e=new Date(1e3*parseInt(r.id.substring(0,8),16));return{id:r.id,commentCount:r.badges.comments,number:r.idShort.toString(),title:r.name,url:r.url,closedDate:null,createdDate:new Date(e.toISOString()),author:null,updatedDate:new Date(r.dateLastActivity),assignees:r.members.map(t=>({id:t.id,username:t.username,name:t.fullName,email:null,avatarUrl:t.avatarUrl,url:null})),description:null,state:n[r.idList??""]?{id:r.idList,name:n[r.idList].name,color:null}:null,type:null,repository:null,upvoteCount:r.badges.votes,labels:r.labels.map(t=>({color:t.color,description:null,id:t.id,name:t.name}))}},be=class extends j{async getCurrentUser(n,e={}){let t=await this.config.request({url:`${e.baseUrl||H}/1/members/me`,headers:W(n.appKey,e.token||this.config.token)});return{data:{name:t.body.fullName,email:t.body.email,avatarUrl:t.body.avatarHash?`https://trello-members.s3.amazonaws.com/${t.body.id}/${t.body.avatarHash}/50.png`:null,id:t.body.id,username:t.body.username,url:t.body.url}}}async getBoardsForCurrentUser(n,e={}){return{data:(await this.config.request({url:`${e.baseUrl||H}/1/members/me/boards?fields=name&filter=open`,headers:W(n.appKey,e.token||this.config.token)})).body.map(s=>({id:s.id,name:s.name}))}}async getListsForTrelloBoard(n,e={}){let{appKey:t,boardId:s}=n;return{data:(await this.config.request({url:`${e.baseUrl||H}/1/boards/${s}/lists`,headers:W(t,e.token||this.config.token)})).body}}async getAccountForId(n,e={}){let{appKey:t,memberId:s}=n,o=await this.config.request({url:`${e.baseUrl||H}/1/members/${s}`,headers:W(t,e.token||this.config.token)});return{data:Jn(o.body)}}async getAccountsForTrelloBoard(n,e={}){let{appKey:t,boardId:s}=n;return{data:(await this.config.request({url:`${e.baseUrl||H}/1/boards/${s}/members`,headers:W(t,e.token||this.config.token)})).body.map(i=>({id:i.id,name:i.fullName,username:i.username,email:null,avatarUrl:null,url:null}))}}async getIssuesForBoard(n,e={}){let t=["-is:archived","sort:edited"],{appKey:s,boardId:o,filterText:i,assigneeLogins:a,labelNamesOrColors:u,trelloBoardListsById:l}=n||{};a&&t.push("@me"),u&&u.forEach(c=>t.push(`label:"${c}"`));let p=`${i?`${i}`:""}${t.join(" ")} board:${o}`;return{data:(await this.config.request({url:`${e.baseUrl||H}/1/search?query=${p}&cards_limit=${Wn}&card_members=true`,headers:W(s,e.token||this.config.token)})).body.cards.map(c=>Vn(c,l||{}))}}async updateIssue(n,e,t,s){return await this.config.request({method:"PUT",url:`${s.baseUrl||H}/1/cards/${e.id}?${t}`,headers:W(n,s.token||this.config.token)})}async setIssueStatus(n,e={}){let{appKey:t,issue:s,status:o}=n;if(!o.id)throw new Error('Trello requires a status "id" for this function.');let i=`idList=${o.id}`;if(!(await this.updateIssue(t,s,i,e)).body.id)throw new Error("Could not set issue status")}async setIssueAssignees(n,e={}){let{appKey:t,issue:s,assignees:o}=n,i=o.map(l=>l.id),a=`idMembers=${encodeURIComponent(i.join(","))}`;if(!(await this.updateIssue(t,s,a,e)).body.id)throw new Error("Could not set issue status")}async setIssueLabels(n,e={}){let{appKey:t,issue:s,labels:o}=n,i=o.map(u=>u.id).join(",");if(!(await this.config.request({method:"PUT",url:`${e.baseUrl||H}/1/cards/${s.id}?idLabels=${encodeURIComponent(i)}`,headers:W(t,e.token||this.config.token)})).body.id)throw new Error("Could not set issue status")}async setIssueArchived(n,e={}){let{appKey:t,issue:s,archived:o}=n;if(!(await this.config.request({method:"PUT",url:`${e.baseUrl||H}/1/cards/${s.id}?closed=${o}`,headers:W(t,e.token||this.config.token)})).body.id)throw new Error("Could not update issue archived status")}async archiveIssue(n,e={}){await this.setIssueArchived({...n,archived:!0},e)}async unArchiveIssue(n,e={}){await this.setIssueArchived({...n,archived:!1},e)}async getLabelsForBoard(n,e={}){let{appKey:t,boardId:s}=n;return{data:(await this.config.request({url:`${e.baseUrl||H}/1/boards/${s}/labels`,headers:W(t,e.token||this.config.token)})).body.map(i=>({color:i.color,description:null,id:i.id,name:i.name}))}}};var Wt=100,st=class{constructor(){this.set=new Set;this.arr=[]}push(...n){let e=n.filter(t=>!this.set.has(t.id));this.arr.push(...e),e.forEach(t=>this.set.add(t.id))}get length(){return this.arr.length}get items(){return this.arr}},X=async(r,n,e,t)=>{let s=n.token||r.token;if(!s)throw new Error("Linear API key is required");let o=await r.request({url:"https://api.linear.app/graphql",method:"POST",headers:{Authorization:s,"Content-Type":"application/json"},body:JSON.stringify({query:e,variables:t})});if(o.status>=400)throw new Error(`Linear API request failed: ${o.status} ${o.statusText}`);let i=o.body;if(i.errors)throw new Error(`Linear GraphQL errors: ${i.errors.map(a=>a.message).join(", ")}`);return i.data},Ht=r=>r?r instanceof Date?r:new Date(r):null,Kn=`
1370
+ }`,o=await v(this.config,{query:s,variables:{fullPath:n,pullRequestId:e.toString()}},t),i=o.body.errors;if(i?.length){if(i.some(Cn))return!1;throw new Error(`Could not request pull request changes: ${Se(i)}`)}let a=o.body.data?.mergeRequestRequestChanges;if(a?.errors&&a.errors.length>0)throw new Error(`Could not request pull request changes: ${a.errors.join(", ")}`);if(!a?.mergeRequest?.id)throw new Error("Could not request pull request changes");return!0}async postMergeRequestNote(n,e,t,s){let o=A(this.config,s),i=encodeURIComponent(n),a=R(s.token||this.config.token);await this.config.request({url:`${o}/projects/${i}/merge_requests/${e}/notes`,method:"POST",headers:{...a,"Content-Type":"application/json"},body:JSON.stringify({body:t})})}};var Qn="https://api.atlassian.com/ex/jira",He=100,Qr=r=>{if(!r||r.length===0)return"statusCategory != Done";let n=new Set(r),e=n.has("OPEN"),t=n.has("CLOSED");return e&&t?null:t?"statusCategory = Done":"statusCategory != Done"},Bt=["assignee","comment","summary","created","creator","updated","votes","issuetype","status","labels","components","project","fixVersions","description"],Br="/rest/api/2/search/jql",Mr="/rest/api/2/search",Mt=(r,n,e,t)=>{let s=r.fields.assignee,o=!t,i=(r.fields[n?.Sprint??""]??[]).filter(a=>typeof a=="object");return{id:r.id,commentCount:r.fields.comment.comments.length,number:r.key,title:r.fields.summary,url:e?`${e}/browse/${r.key}`:null,closedDate:null,createdDate:new Date(r.fields.created),author:We(r.fields.creator,e,o),updatedDate:new Date(r.fields.updated),assignees:s?[We(s,e,o)]:[],description:r.fields.description,repository:null,project:{name:r.fields.project.name,resourceId:t??null,key:r.fields.project.key,namespace:null,id:r.fields.project.id},state:Hn(r.fields.status),statusTransitions:r.transitions?.map(Bn)??[],components:r.fields.components?.map(Mn)??[],type:r.fields.issuetype.name,upvoteCount:r.fields.votes?.votes||0,labels:r.fields.labels?.map(a=>({color:null,description:null,id:null,name:a}))??[],sprints:i.map(Wn),fixVersions:r.fields.fixVersions.map(Jn)}},Bn=r=>{let n;switch(r.to.statusCategory.name){case"To Do":n="TO_DO";break;case"In Progress":n="IN_PROGRESS";break;default:n="DONE";break}return{name:r.name,id:r.id,to:{id:r.to.id,name:r.to.name,color:r.to.statusCategory.colorName,category:n}}},Mn=r=>({description:r.description??null,id:r.id,name:r.name}),zn=(r,n,e)=>e&&r.name?`${n}/secure/ViewProfile.jspa?name=${encodeURIComponent(r.name)}`:`${n}/jira/people/${r.accountId}`,We=(r,n,e)=>({id:(e?r.key:r.accountId)??"",name:r.displayName,email:r.emailAddress,avatarUrl:r.avatarUrls["48x48"],username:r.displayName,url:zn(r,n,e)}),Hn=r=>{let n;switch(r.statusCategory.name){case"To Do":n="TO_DO";break;case"In Progress":n="IN_PROGRESS";break;default:n="DONE";break}return{id:r.id,name:r.name,color:r.statusCategory.colorName,category:n}},Wn=r=>({id:r.id.toString(),name:r.name,isActive:r.state==="active",startDate:r.startDate?new Date(r.startDate):null,endDate:r.endDate?new Date(r.endDate):null,completedDate:r.completeDate?new Date(r.completeDate):null}),Jn=r=>({id:r.id,description:r.description,name:r.name,archived:r.archived,released:r.released,releaseDate:r.releaseDate?new Date(r.releaseDate):null}),re=(r,n,e)=>e?`${n.baseUrl||Qn}/${e}`:`${n?.baseUrl||r.baseUrl}`,Je=async(r,n,e={})=>{let{resourceId:t}=n;return(await r.request({url:`${re(r,e,t)}/rest/api/2/field`,headers:R(e.token||r.token)})).body},Ve=async(r,n,e,t={})=>{let{number:s,resourceId:o,fields:i}=n||{},a=await r.request({url:`${re(r,t,o)}/rest/api/2/issue/${s}?fields=${Bt.join(",")}&expand=transitions`,headers:R(t.token||r.token)});return{data:Mt(a.body,i,e,o)}},Ke=async(r,n,e,t={})=>{let{cursor:s,resourceId:o,labelNames:i,fields:a}=n||{},u=["statusCategory != Done",`(creator = currentUser() OR assignee = currentUser()
1371
+ OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUser())`];i&&i.forEach(f=>u.push(`labels = "${f}"`));let l=`${u.join(" AND ")} ORDER BY updated DESC`,p=!o,d=p?Mr:Br,c=new URL(`${re(r,t,o)}${d}`);c.searchParams.set("jql",l),c.searchParams.set("maxResults",He.toString()),c.searchParams.set("fields",Bt.join(",")),c.searchParams.set("expand","transitions"),s&&(p?c.searchParams.set("startAt",s):c.searchParams.set("nextPageToken",s));let g=await r.request({url:c.toString(),headers:R(t.token||r.token)}),m=g.body.issues.map(f=>Mt(f,a,e,o)),h=!1,y="";return p?(h=m.length==He,y=(parseInt(s??"0",10)+m.length).toString()):(h=!!g.body.nextPageToken,y=g.body.nextPageToken??null),{data:m,pageInfo:{hasNextPage:h,endCursor:y}}},zr=async(r,n,e,t={})=>{let{cursor:s,resourceId:o,jql:i,fields:a}=n||{},u=U(n?.pageSize,{fallback:He,max:He}),l=[...Bt],p=a?.Sprint;p&&l.push(p);let d=!o,c=d?Mr:Br,g=new URL(`${re(r,t,o)}${c}`);g.searchParams.set("jql",i.join(" AND ")),g.searchParams.set("maxResults",u.toString()),g.searchParams.set("fields",l.join(",")),g.searchParams.set("expand","transitions"),s&&(d?g.searchParams.set("startAt",s):g.searchParams.set("nextPageToken",s));let m=await r.request({url:g.toString(),headers:R(t.token||r.token)}),h=m.body.issues.map(P=>Mt(P,a,e,o)),y=!1,f="";if(d){let P=parseInt(s??"0",10),S=typeof m.body.startAt=="number"?m.body.startAt:Number.isNaN(P)?0:P,D=m.body.total;y=typeof D=="number"?S+h.length<D:h.length===u,f=(S+h.length).toString()}else y=!!m.body.nextPageToken,f=m.body.nextPageToken??null;return{data:h,pageInfo:{hasNextPage:y,endCursor:f}}},Xe=async(r,n,e,t={})=>{let{assigneeLogins:s,authorLogin:o,mentionLogin:i,labelNames:a,cursor:u,projectKey:l,resourceId:p,fields:d}=n||{},c=[`project = "${l}"`],g=Qr(n.states);return g&&c.push(g),o&&c.push(`creator in ("${o}")`),s&&s.length!==0&&c.push(`assignee in ("${s.join('", "')}")`),i&&c.push(`comment ~ "${i}"`),a&&a.forEach(m=>c.push(`labels = "${m}"`)),zr(r,{resourceId:p,jql:c,cursor:u,fields:d,pageSize:n.pageSize},e,t)},Ze=async(r,n,e,t={})=>{let{assigneeLogins:s,authorLogin:o,mentionLogin:i,labelNames:a,cursor:u,projectKeys:l,resourceId:p,fields:d}=n||{},g=["("+l.map(h=>`project = "${h}"`).join(" OR ")+")"],m=Qr(n.states);return m&&g.push(m),o&&g.push(`creator in ("${o}")`),s&&s.length!==0&&g.push(`assignee in ("${s.join('", "')}")`),i&&g.push(`comment ~ "${i}"`),a&&a.forEach(h=>g.push(`labels = "${h}"`)),zr(r,{resourceId:p,jql:g,fields:d,cursor:u,pageSize:n.pageSize},e,t)},Ye=async(r,n,e={})=>{let{issue:t,labels:s}=n;if(!t.project)throw new Error('Jira requires a "project" for this function.');let o={fields:{labels:s.map(i=>i.name)}};await r.request({method:"PUT",url:`${re(r,e,t.project.resourceId??void 0)}/rest/api/2/issue/${t.id}`,body:JSON.stringify(o),headers:{...R(e.token||r.token),"Content-Type":"application/json"}})},et=async(r,n,e={})=>{let{issue:t,components:s}=n;if(!t.project)throw new Error('Jira requires a "project" for this function.');let o={fields:{components:s.map(i=>({id:i.id}))}};await r.request({method:"PUT",url:`${re(r,e,t.project.resourceId??void 0)}/rest/api/2/issue/${t.id}`,body:JSON.stringify(o),headers:{...R(e.token||r.token),"Content-Type":"application/json"}})},tt=async(r,n,e={})=>{let{issue:t,status:s}=n;if(!t.project)throw new Error('Jira requires a "project" for this function.');if(!s.id)throw new Error('Jira requires a status "id" for this function.');let o={transition:{id:s.id}};await r.request({method:"POST",url:`${re(r,e,t.project.resourceId??void 0)}/rest/api/2/issue/${t.id}/transitions`,body:JSON.stringify(o),headers:{...R(e.token||r.token),"Content-Type":"application/json"}})},rt=async(r,n,e={})=>{let{resourceId:t,projectIdOrKey:s}=n,o=new URL(`${re(r,e,t)}/rest/api/2/project/${s}/components`);return{data:(await r.request({url:o.toString(),headers:R(e.token||r.token)})).body}};var Ce="https://api.atlassian.com/ex/jira",zt=100,Re=class extends j{constructor(){super(...arguments);this._resourceUrlCache={};this._issueFieldsCache={}}async getIssueFieldsForResource(e,t={}){if(!this._issueFieldsCache[e.resourceId]){let s=await Je(this.config,e,t);this._issueFieldsCache[e.resourceId]=s.reduce((o,i)=>({...o,[i.name]:i.id}),{})}return this._issueFieldsCache[e.resourceId]??null}async getResourceUrl(e,t={}){let s=t.token||this.config.token;if(!s)return null;let o=this._resourceUrlCache[s];return o?o[e.resourceId]??null:(await this.getJiraResourcesForCurrentUser(t),this._resourceUrlCache[s]?.[e.resourceId]??null)}async getCurrentUserForResource(e,t={}){let s=await this.getResourceUrl({resourceId:e.resourceId},t),o=await this.config.request({url:`${t.baseUrl||Ce}/${e.resourceId}/rest/api/2/myself`,headers:R(t.token||this.config.token)});return{data:{name:o.body.displayName,email:o.body.emailAddress,avatarUrl:o.body.avatarUrls["48x48"],id:o.body.accountId,username:o.body.displayName,url:s?`${s}/jira/people/${o.body.accountId}`:null}}}async getJiraResourcesForCurrentUser(e={}){let t=await this.config.request({url:`${e.baseUrl||"https://api.atlassian.com/"}/oauth/token/accessible-resources`,headers:R(e.token||this.config.token)}),s=e.token||this.config.token,o=s?this._resourceUrlCache[s]||{}:void 0,i=t.body.map(a=>(o&&(o[a.id]=a.url),{avatarUrl:a.avatarUrl,id:a.id,name:a.name,url:a.url}));return s&&(this._resourceUrlCache[s]=o),{data:i}}async getJiraProjectsForResource(e,t={}){let s=new URL(`${t.baseUrl||Ce}/${e.resourceId}/rest/api/2/project/search`);s.searchParams.set("maxResults",zt.toString()),e.cursor&&s.searchParams.set("startAt",e.cursor);let o=await this.config.request({url:s.toString(),headers:R(t.token||this.config.token)});return{pageInfo:{hasNextPage:o.body.values.length!==0,endCursor:(o.body.startAt+o.body.values.length).toString()},data:o.body.values.map(i=>({id:i.id,key:i.key,name:i.name,resourceId:e.resourceId}))}}async getJiraProjectsForResources(e,t={}){let s=[];return await Promise.all(e.resourceIds.map(async o=>{try{return await er(i=>this.getJiraProjectsForResource({resourceId:o,cursor:i},t))}catch{return[]}})).then((...o)=>{o.forEach(i=>{s=s.concat(...i)})}),{data:s}}async getAccountsForJiraProject(e,t={}){let{resourceId:s,projectKey:o,cursor:i}=e,a=await this.getResourceUrl({resourceId:s},t),u=new URL(`${t.baseUrl||Ce}/${s}/rest/api/2/user/assignable/search`);u.searchParams.set("maxResults",zt.toString()),i&&u.searchParams.set("startAt",i),u.searchParams.set("project",o);let l=await this.config.request({url:u.toString(),headers:R(t.token||this.config.token)});return{pageInfo:{hasNextPage:l.body.length!==0,endCursor:((i?parseInt(i):0)+l.body.length).toString()},data:l.body.filter(p=>p.accountType!=="app"&&p.active).map(p=>We(p,a,!1))}}async getComponentsForJiraProject(e,t={}){return await rt(this.config,e,t)}async getIssue(e,t={}){let s=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await Ve(this.config,{...e,fields:s},o,t)}async getIssuesForProject(e,t={}){let s=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await Xe(this.config,{...e,fields:s},o,t)}async getIssuesForProjects(e,t={}){let s=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await Ze(this.config,{...e,fields:s},o,t)}async getIssuesForResourceForCurrentUser(e,t={}){let s=await this.getIssueFieldsForResource({resourceId:e.resourceId},t),o=await this.getResourceUrl({resourceId:e.resourceId},t);return await Ke(this.config,{...e,fields:s},o,t)}async setIssueStatus(e,t={}){await tt(this.config,e,t)}async setIssueAssignee(e,t={}){let{issue:s,assignee:o}=e;if(!s.project)throw new Error('Jira Cloud requires a "project" for this function.');if(!s.project.resourceId)throw new Error('Jira Cloud requires a project "resourceId" for this function.');let i={accountId:o?.id};await this.config.request({method:"PUT",url:`${t.baseUrl||Ce}/${s.project.resourceId}/rest/api/2/issue/${s.id}/assignee`,body:JSON.stringify(i),headers:{...R(t.token||this.config.token),"Content-Type":"application/json"}})}async setIssueComponents(e,t={}){await et(this.config,e,t)}async setIssueLabels(e,t={}){await Ye(this.config,e,t)}async getLabelsForResource(e,t={}){let{resourceId:s,cursor:o}=e,i=new URL(`${t.baseUrl||Ce}/${s}/rest/api/2/label`);i.searchParams.set("maxResults",zt.toString()),o&&i.searchParams.set("startAt",o);let a=await this.config.request({url:i.toString(),headers:R(t.token||this.config.token)});return{pageInfo:{hasNextPage:!a.body.isLast,endCursor:(a.body.startAt+a.body.values.length).toString()},data:a.body.values.map(u=>({color:null,description:null,id:null,name:u}))}}};var Ie=class extends N{constructor(){super(...arguments);this._issueFieldsCache={}}async getIssueFieldsForResource(e={}){let t=e?.baseUrl||this.config.baseUrl||"";if(!this._issueFieldsCache[t]){let s=await Je(this.config,{},e);this._issueFieldsCache[t]=s.reduce((o,i)=>({...o,[i.name]:i.id}),{})}return this._issueFieldsCache[t]??null}async getCurrentUser(e={}){let t=await this.config.request({url:`${e?.baseUrl||this.config.baseUrl}/rest/api/2/myself`,headers:R(e?.token||this.config.token)});return{data:{name:t.body.displayName,email:t.body.emailAddress,avatarUrl:t.body.avatarUrls["48x48"],id:t.body.key,username:t.body.displayName,url:null}}}async getJiraProjects(e={}){return{data:(await this.config.request({url:`${e?.baseUrl||this.config.baseUrl}/rest/api/2/project`,headers:R(e?.token||this.config.token)})).body.map(s=>({id:s.id,name:s.name}))}}async getIssue(e,t={}){let s=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!s)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await Ve(this.config,{...e,fields:o},s,t)}async getIssuesForProject(e,t={}){let s=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!s)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await Xe(this.config,{...e,fields:o},s,t)}async getIssuesForProjects(e,t={}){let s=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!s)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await Ze(this.config,{...e,fields:o},s,t)}async getIssuesForResourceForCurrentUser(e,t={}){let s=e.resourceUrl||t.baseUrl||this.config.baseUrl;if(!s)throw new Error('Jira Server requires a "resourceUrl" or "baseUrl" for this function.');let o=await this.getIssueFieldsForResource(t);return await Ke(this.config,{...e,fields:o},s,t)}async setIssueStatus(e,t={}){await tt(this.config,e,t)}async setIssueLabels(e,t={}){await Ye(this.config,e,t)}async setIssueComponents(e,t={}){await et(this.config,e,t)}async getLabels(e={}){return{data:(await this.config.request({url:`${e?.baseUrl||this.config.baseUrl}/rest/api/2/jql/autocompletedata/suggestions?fieldName=labels`,headers:R(e.token||this.config.token)})).body.results.map(({displayName:s})=>({color:null,description:null,id:null,name:s}))}}async getComponentsForJiraProject(e,t={}){return await rt(this.config,e,t)}};var H="https://api.trello.com",Vn=1e3,W=(r,n)=>({...R(n),Authorization:`OAuth oauth_consumer_key="${r}", oauth_token="${n}"`}),Kn=r=>({id:r.id,username:r.username,url:r.url,name:r.fullName,email:r.email,avatarUrl:r.avatarUrl}),Xn=(r,n)=>{let e=new Date(1e3*parseInt(r.id.substring(0,8),16));return{id:r.id,commentCount:r.badges.comments,number:r.idShort.toString(),title:r.name,url:r.url,closedDate:null,createdDate:new Date(e.toISOString()),author:null,updatedDate:new Date(r.dateLastActivity),assignees:r.members.map(t=>({id:t.id,username:t.username,name:t.fullName,email:null,avatarUrl:t.avatarUrl,url:null})),description:null,state:n[r.idList??""]?{id:r.idList,name:n[r.idList].name,color:null}:null,type:null,repository:null,upvoteCount:r.badges.votes,labels:r.labels.map(t=>({color:t.color,description:null,id:t.id,name:t.name}))}},be=class extends j{async getCurrentUser(n,e={}){let t=await this.config.request({url:`${e.baseUrl||H}/1/members/me`,headers:W(n.appKey,e.token||this.config.token)});return{data:{name:t.body.fullName,email:t.body.email,avatarUrl:t.body.avatarHash?`https://trello-members.s3.amazonaws.com/${t.body.id}/${t.body.avatarHash}/50.png`:null,id:t.body.id,username:t.body.username,url:t.body.url}}}async getBoardsForCurrentUser(n,e={}){return{data:(await this.config.request({url:`${e.baseUrl||H}/1/members/me/boards?fields=name&filter=open`,headers:W(n.appKey,e.token||this.config.token)})).body.map(s=>({id:s.id,name:s.name}))}}async getListsForTrelloBoard(n,e={}){let{appKey:t,boardId:s}=n;return{data:(await this.config.request({url:`${e.baseUrl||H}/1/boards/${s}/lists`,headers:W(t,e.token||this.config.token)})).body}}async getAccountForId(n,e={}){let{appKey:t,memberId:s}=n,o=await this.config.request({url:`${e.baseUrl||H}/1/members/${s}`,headers:W(t,e.token||this.config.token)});return{data:Kn(o.body)}}async getAccountsForTrelloBoard(n,e={}){let{appKey:t,boardId:s}=n;return{data:(await this.config.request({url:`${e.baseUrl||H}/1/boards/${s}/members`,headers:W(t,e.token||this.config.token)})).body.map(i=>({id:i.id,name:i.fullName,username:i.username,email:null,avatarUrl:null,url:null}))}}async getIssuesForBoard(n,e={}){let t=["-is:archived","sort:edited"],{appKey:s,boardId:o,filterText:i,assigneeLogins:a,labelNamesOrColors:u,trelloBoardListsById:l}=n||{};a&&t.push("@me"),u&&u.forEach(c=>t.push(`label:"${c}"`));let p=`${i?`${i}`:""}${t.join(" ")} board:${o}`;return{data:(await this.config.request({url:`${e.baseUrl||H}/1/search?query=${p}&cards_limit=${Vn}&card_members=true`,headers:W(s,e.token||this.config.token)})).body.cards.map(c=>Xn(c,l||{}))}}async updateIssue(n,e,t,s){return await this.config.request({method:"PUT",url:`${s.baseUrl||H}/1/cards/${e.id}?${t}`,headers:W(n,s.token||this.config.token)})}async setIssueStatus(n,e={}){let{appKey:t,issue:s,status:o}=n;if(!o.id)throw new Error('Trello requires a status "id" for this function.');let i=`idList=${o.id}`;if(!(await this.updateIssue(t,s,i,e)).body.id)throw new Error("Could not set issue status")}async setIssueAssignees(n,e={}){let{appKey:t,issue:s,assignees:o}=n,i=o.map(l=>l.id),a=`idMembers=${encodeURIComponent(i.join(","))}`;if(!(await this.updateIssue(t,s,a,e)).body.id)throw new Error("Could not set issue status")}async setIssueLabels(n,e={}){let{appKey:t,issue:s,labels:o}=n,i=o.map(u=>u.id).join(",");if(!(await this.config.request({method:"PUT",url:`${e.baseUrl||H}/1/cards/${s.id}?idLabels=${encodeURIComponent(i)}`,headers:W(t,e.token||this.config.token)})).body.id)throw new Error("Could not set issue status")}async setIssueArchived(n,e={}){let{appKey:t,issue:s,archived:o}=n;if(!(await this.config.request({method:"PUT",url:`${e.baseUrl||H}/1/cards/${s.id}?closed=${o}`,headers:W(t,e.token||this.config.token)})).body.id)throw new Error("Could not update issue archived status")}async archiveIssue(n,e={}){await this.setIssueArchived({...n,archived:!0},e)}async unArchiveIssue(n,e={}){await this.setIssueArchived({...n,archived:!1},e)}async getLabelsForBoard(n,e={}){let{appKey:t,boardId:s}=n;return{data:(await this.config.request({url:`${e.baseUrl||H}/1/boards/${s}/labels`,headers:W(t,e.token||this.config.token)})).body.map(i=>({color:i.color,description:null,id:i.id,name:i.name}))}}};var Wt=100,st=class{constructor(){this.set=new Set;this.arr=[]}push(...n){let e=n.filter(t=>!this.set.has(t.id));this.arr.push(...e),e.forEach(t=>this.set.add(t.id))}get length(){return this.arr.length}get items(){return this.arr}},X=async(r,n,e,t)=>{let s=n.token||r.token;if(!s)throw new Error("Linear API key is required");let o=await r.request({url:"https://api.linear.app/graphql",method:"POST",headers:{Authorization:s,"Content-Type":"application/json"},body:JSON.stringify({query:e,variables:t})});if(o.status>=400)throw new Error(`Linear API request failed: ${o.status} ${o.statusText}`);let i=o.body;if(i.errors)throw new Error(`Linear GraphQL errors: ${i.errors.map(a=>a.message).join(", ")}`);return i.data},Ht=r=>r?r instanceof Date?r:new Date(r):null,Zn=`
1372
1372
  id
1373
1373
  name
1374
1374
  description
@@ -1380,7 +1380,7 @@ OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUs
1380
1380
  query GetProjects($first: Int!, $after: String) {
1381
1381
  projects(first: $first, after: $after) {
1382
1382
  nodes {
1383
- ${Kn}
1383
+ ${Zn}
1384
1384
  }
1385
1385
  pageInfo {
1386
1386
  hasNextPage
@@ -1388,7 +1388,7 @@ OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUs
1388
1388
  }
1389
1389
  }
1390
1390
  }
1391
- `;return(await X(r,n,t,{first:Wt,after:e})).projects},Xn=`
1391
+ `;return(await X(r,n,t,{first:Wt,after:e})).projects},Yn=`
1392
1392
  id
1393
1393
  name
1394
1394
  number
@@ -1400,7 +1400,7 @@ OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUs
1400
1400
  query GetCycles($first: Int!, $after: String) {
1401
1401
  cycles(first: $first, after: $after) {
1402
1402
  nodes {
1403
- ${Xn}
1403
+ ${Yn}
1404
1404
  }
1405
1405
  pageInfo {
1406
1406
  hasNextPage
@@ -1408,7 +1408,7 @@ OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUs
1408
1408
  }
1409
1409
  }
1410
1410
  }
1411
- `;return(await X(r,n,t,{first:Wt,after:e})).cycles},Zn=`
1411
+ `;return(await X(r,n,t,{first:Wt,after:e})).cycles},eo=`
1412
1412
  id
1413
1413
  name
1414
1414
  color
@@ -1417,7 +1417,7 @@ OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUs
1417
1417
  query GetLabels($first: Int!, $after: String) {
1418
1418
  projectLabels(first: $first, after: $after) {
1419
1419
  nodes {
1420
- ${Zn}
1420
+ ${eo}
1421
1421
  }
1422
1422
  pageInfo {
1423
1423
  hasNextPage
@@ -1430,26 +1430,26 @@ OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUs
1430
1430
  name
1431
1431
  key
1432
1432
  icon
1433
- `;function Yn(r){return{id:r.id,name:r.name,key:r.key,iconUrl:r.icon}}var ts=`
1433
+ `;function to(r){return{id:r.id,name:r.name,key:r.key,iconUrl:r.icon}}var ts=`
1434
1434
  id
1435
1435
  name
1436
1436
  avatarUrl
1437
- `;function rs(r){return r?{id:r.id,name:r.name,username:r.name,email:null,avatarUrl:r.avatarUrl??null,url:null}:null}var eo=`
1437
+ `;function rs(r){return r?{id:r.id,name:r.name,username:r.name,email:null,avatarUrl:r.avatarUrl??null,url:null}:null}var ro=`
1438
1438
  id
1439
1439
  name
1440
- `;function to(r,n){if(r)return{id:r.id,name:r.name,key:n?.key||null,namespace:null,resourceId:n?.id||null}}var ro=`
1440
+ `;function so(r,n){if(r)return{id:r.id,name:r.name,key:n?.key||null,namespace:null,resourceId:n?.id||null}}var no=`
1441
1441
  id
1442
1442
  sortOrder
1443
1443
  name
1444
1444
  description
1445
1445
  status
1446
1446
  targetDate
1447
- `;function so(r){return r?{id:r.id,number:r.sortOrder,title:r.name,description:r.description??null,isOpen:r.status!=="done",url:"",startDate:null,dueDate:ot(r.targetDate)}:null}function no(r){switch(r){case"completed":case"canceled":return"DONE";case"started":return"IN_PROGRESS";default:return"TO_DO"}}var oo=`
1447
+ `;function oo(r){return r?{id:r.id,number:r.sortOrder,title:r.name,description:r.description??null,isOpen:r.status!=="done",url:"",startDate:null,dueDate:ot(r.targetDate)}:null}function io(r){switch(r){case"completed":case"canceled":return"DONE";case"started":return"IN_PROGRESS";default:return"TO_DO"}}var ao=`
1448
1448
  id
1449
1449
  name
1450
1450
  color
1451
1451
  type
1452
- `;function io(r){return r?{id:r.id,name:r.name,color:r.color,category:no(r.type)}:null}var Vt=`
1452
+ `;function uo(r){return r?{id:r.id,name:r.name,color:r.color,category:io(r.type)}:null}var Vt=`
1453
1453
  creator {
1454
1454
  ${ts}
1455
1455
  }
@@ -1462,21 +1462,21 @@ OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUs
1462
1462
  id
1463
1463
  identifier
1464
1464
  project {
1465
- ${eo}
1465
+ ${ro}
1466
1466
  }
1467
1467
  team {
1468
1468
  ${ss}
1469
1469
  }
1470
1470
  state {
1471
- ${oo}
1471
+ ${ao}
1472
1472
  }
1473
1473
  title
1474
1474
  updatedAt
1475
1475
  url
1476
1476
  projectMilestone {
1477
- ${ro}
1477
+ ${no}
1478
1478
  }
1479
- `;async function Jt(r){return{author:rs(await r.creator),assignees:[rs(await r.assignee)].filter(n=>n!=null),commentCount:null,closedDate:ot(r.archivedAt),createdDate:ot(r.createdAt),description:r.description??null,id:r.id,labels:[],number:r.identifier,repository:null,project:to(await r.project,await r.team),state:io(await r.state),title:r.title,type:null,updatedDate:ot(r.updatedAt),upvoteCount:null,url:r.url,milestone:so(await r.projectMilestone)}}var nt=`
1479
+ `;async function Jt(r){return{author:rs(await r.creator),assignees:[rs(await r.assignee)].filter(n=>n!=null),commentCount:null,closedDate:ot(r.archivedAt),createdDate:ot(r.createdAt),description:r.description??null,id:r.id,labels:[],number:r.identifier,repository:null,project:so(await r.project,await r.team),state:uo(await r.state),title:r.title,type:null,updatedDate:ot(r.updatedAt),upvoteCount:null,url:r.url,milestone:oo(await r.projectMilestone)}}var nt=`
1480
1480
  nodes {
1481
1481
  ${Vt}
1482
1482
  }
@@ -1515,7 +1515,7 @@ OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUs
1515
1515
  displayName
1516
1516
  }
1517
1517
  }
1518
- `;return(await X(this.config,n,e)).viewer}async getIssue(n,e={}){let t=await this.fetchIssue(n.number,e);return{data:await Jt(t)}}async getLinearOrganization(n={}){let e=await this.fetchOrganization(n);return{data:{id:e.id,name:e.name,key:e.urlKey,url:`https://linear.app/${e.urlKey}`}}}async getTeamsForCurrentUser(n={}){return{data:(await this.fetchTeams(n)).nodes.map(Yn)}}async getProjects(n={},e={}){let t=await Wr(this.config,e,n.cursor??void 0);return{data:t.nodes.map(Hr),pageInfo:{hasNextPage:t.pageInfo.hasNextPage,endCursor:t.pageInfo.endCursor??null}}}async getCycles(n={},e={}){let t=await Vr(this.config,e,n.cursor??void 0);return{data:t.nodes.map(Jr),pageInfo:{hasNextPage:t.pageInfo.hasNextPage,endCursor:t.pageInfo.endCursor??null}}}async getLabels(n={},e={}){let t=await Xr(this.config,e,n.cursor??void 0);return{data:t.nodes.map(Kr),pageInfo:{hasNextPage:t.pageInfo.hasNextPage,endCursor:t.pageInfo.endCursor??null}}}async getCurrentUser(n={}){return{data:await this.fetchViewer(n)}}async getIssuesForCurrentUser(n,e={}){let{cursor:t}=n,{category:s,cursor:o}=Yr(t),i=await this.fetchViewer(e),a,u,l=new st,p=async(d,c)=>{if(u||s>d)return;let g=await c(Math.max(es-l.length,1),s===d?o:void 0);if(!g)return;let m=await pt(g.nodes.map(Jt));l.push(...m),g.pageInfo.hasNextPage&&(a=d,u=g.pageInfo.endCursor)};return await p(1,async(d,c)=>(await this.rawRequest(e,`
1518
+ `;return(await X(this.config,n,e)).viewer}async getIssue(n,e={}){let t=await this.fetchIssue(n.number,e);return{data:await Jt(t)}}async getLinearOrganization(n={}){let e=await this.fetchOrganization(n);return{data:{id:e.id,name:e.name,key:e.urlKey,url:`https://linear.app/${e.urlKey}`}}}async getTeamsForCurrentUser(n={}){return{data:(await this.fetchTeams(n)).nodes.map(to)}}async getProjects(n={},e={}){let t=await Wr(this.config,e,n.cursor??void 0);return{data:t.nodes.map(Hr),pageInfo:{hasNextPage:t.pageInfo.hasNextPage,endCursor:t.pageInfo.endCursor??null}}}async getCycles(n={},e={}){let t=await Vr(this.config,e,n.cursor??void 0);return{data:t.nodes.map(Jr),pageInfo:{hasNextPage:t.pageInfo.hasNextPage,endCursor:t.pageInfo.endCursor??null}}}async getLabels(n={},e={}){let t=await Xr(this.config,e,n.cursor??void 0);return{data:t.nodes.map(Kr),pageInfo:{hasNextPage:t.pageInfo.hasNextPage,endCursor:t.pageInfo.endCursor??null}}}async getCurrentUser(n={}){return{data:await this.fetchViewer(n)}}async getIssuesForCurrentUser(n,e={}){let{cursor:t}=n,{category:s,cursor:o}=Yr(t),i=await this.fetchViewer(e),a,u,l=new st,p=async(d,c)=>{if(u||s>d)return;let g=await c(Math.max(es-l.length,1),s===d?o:void 0);if(!g)return;let m=await pt(g.nodes.map(Jt));l.push(...m),g.pageInfo.hasNextPage&&(a=d,u=g.pageInfo.endCursor)};return await p(1,async(d,c)=>(await this.rawRequest(e,`
1519
1519
  query GetAssignedIssues($first: Int!, $after: String) {
1520
1520
  viewer {
1521
1521
  issues: assignedIssues(first: $first, after: $after) {
@@ -1593,4 +1593,4 @@ OR comment ~ currentUser() OR summary ~ currentUser() OR description ~ currentUs
1593
1593
  ${nt}
1594
1594
  }
1595
1595
  }
1596
- `,d=(await this.rawRequest(e,l,{first:es,after:i})).data?.issues;return d?{data:await pt(d.nodes.map(Jt)),pageInfo:{hasNextPage:d.pageInfo.hasNextPage,endCursor:d.pageInfo.endCursor??null}}:{data:[],pageInfo:{hasNextPage:!1,endCursor:null}}}};var ns=r=>{let n={request:r?.request};return{azureDevOps:new de({...n,...r?.azureDevOps}),bitbucket:new ce({...n,...r?.bitbucket}),bitbucketServer:new me({...n,...r?.bitbucketServer}),github:new ge({...n,...r?.github}),gitlab:new fe({...n,...r?.gitlab}),jira:new Re({...n,...r?.jira}),jiraServer:new Ie({...n,...r?.jiraServer}),linear:new it({...n,...r?.linear}),trello:new be({...n,...r?.trello})}};var os=(i=>(i.Conflicts="conflicts",i.Failure="failure",i.NotSet="notSet",i.Queued="queued",i.RejectedByPolicy="rejectedByPolicy",i.Succeeded="succeeded",i))(os||{});var is=(e=>(e.Zero="0",e.One="1",e))(is||{}),as=(e=>(e.PullRequest="pr",e.Issue="issue",e))(as||{}),us=(c=>(c.Azure="azure",c.AzureDevOpsServer="azureDevOpsServer",c.Github="github",c.GithubEnterprise="githubEnterprise",c.Gitlab="gitlab",c.GitlabSelfHosted="gitlabSelfHosted",c.Bitbucket="bitbucket",c.BitbucketServer="bitbucketServer",c.Jira="jira",c.JiraServer="jiraServer",c.Linear="linear",c.Trello="trello",c))(us||{});var ls=(e=>(e.Completed="COMPLETED",e.NotPlanned="NOT_PLANNED",e))(ls||{});var ao=ns;
1596
+ `,d=(await this.rawRequest(e,l,{first:es,after:i})).data?.issues;return d?{data:await pt(d.nodes.map(Jt)),pageInfo:{hasNextPage:d.pageInfo.hasNextPage,endCursor:d.pageInfo.endCursor??null}}:{data:[],pageInfo:{hasNextPage:!1,endCursor:null}}}};var ns=r=>{let n={request:r?.request};return{azureDevOps:new de({...n,...r?.azureDevOps}),bitbucket:new ce({...n,...r?.bitbucket}),bitbucketServer:new me({...n,...r?.bitbucketServer}),github:new ge({...n,...r?.github}),gitlab:new fe({...n,...r?.gitlab}),jira:new Re({...n,...r?.jira}),jiraServer:new Ie({...n,...r?.jiraServer}),linear:new it({...n,...r?.linear}),trello:new be({...n,...r?.trello})}};var os=(i=>(i.Conflicts="conflicts",i.Failure="failure",i.NotSet="notSet",i.Queued="queued",i.RejectedByPolicy="rejectedByPolicy",i.Succeeded="succeeded",i))(os||{});var is=(e=>(e.Zero="0",e.One="1",e))(is||{}),as=(e=>(e.PullRequest="pr",e.Issue="issue",e))(as||{}),us=(c=>(c.Azure="azure",c.AzureDevOpsServer="azureDevOpsServer",c.Github="github",c.GithubEnterprise="githubEnterprise",c.Gitlab="gitlab",c.GitlabSelfHosted="gitlabSelfHosted",c.Bitbucket="bitbucket",c.BitbucketServer="bitbucketServer",c.Jira="jira",c.JiraServer="jiraServer",c.Linear="linear",c.Trello="trello",c))(us||{});var ls=(e=>(e.Completed="COMPLETED",e.NotPlanned="NOT_PLANNED",e))(ls||{});var lo=ns;