1
+ import type { Account } from '@gitkraken/provider-apis' ;
1
2
import {
2
3
AzureDevOps ,
3
4
Bitbucket ,
5
+ BitbucketServerUtils ,
4
6
EntityIdentifierProviderType ,
5
7
EntityIdentifierUtils ,
6
8
EntityType ,
7
9
GitHub ,
8
10
GitLab ,
9
11
} from '@gitkraken/provider-apis' ;
10
12
import { fetchProviderToken } from './gkApi' ;
13
+ import { GKDotDevUrl } from './shared' ;
11
14
import type { FocusViewData , FocusViewSupportedProvider , Provider , ProviderToken } from './types' ;
12
15
13
16
export const ProviderMeta : Record < FocusViewSupportedProvider , { name : string ; iconSrc : string } > = {
@@ -16,6 +19,7 @@ export const ProviderMeta: Record<FocusViewSupportedProvider, { name: string; ic
16
19
gitlab : { name : 'GitLab' , iconSrc : 'img/gitlab-color.svg' } ,
17
20
gitlabSelfHosted : { name : 'GitLab Self-Managed' , iconSrc : 'img/gitlab-color.svg' } ,
18
21
bitbucket : { name : 'Bitbucket' , iconSrc : 'img/bitbucket-color.svg' } ,
22
+ bitbucketServer : { name : 'Bitbucket Server' , iconSrc : 'img/bitbucket-color.svg' } ,
19
23
azure : { name : 'Azure DevOps' , iconSrc : 'img/azuredevops-color.svg' } ,
20
24
} ;
21
25
@@ -57,6 +61,7 @@ const fetchGitLabFocusViewData = async (token: ProviderToken) => {
57
61
58
62
const { data : pullRequests } = await gitlab . getPullRequestsAssociatedWithUser ( {
59
63
username : providerUser . username ,
64
+ includeFromArchivedRepos : false ,
60
65
} ) ;
61
66
62
67
return { providerUser : providerUser , pullRequests : pullRequests . map ( pr => ( { ...pr , uuid : '' } ) ) } ;
@@ -74,6 +79,34 @@ const fetchBitbucketFocusViewData = async (token: ProviderToken) => {
74
79
return { providerUser : providerUser , pullRequests : pullRequests . map ( pr => ( { ...pr , uuid : '' } ) ) } ;
75
80
} ;
76
81
82
+ const fetchBitbucketServerFocusViewData = async ( token : ProviderToken ) => {
83
+ // Bitbucket Server does not have the CORS header set to be able to make requests from the browser,
84
+ // so we proxy the request through the API.
85
+ const res = await fetch ( `${ GKDotDevUrl } /api/provider/bitbucket-server/proxy` , {
86
+ headers : {
87
+ Authorization : `Bearer ${ token . accessToken } ` ,
88
+ XDestination : `${ token . domain } /rest/api/latest/dashboard/pull-requests` ,
89
+ } ,
90
+ } ) ;
91
+
92
+ if ( ! res . ok ) {
93
+ throw new Error ( 'Failed to fetch Bitbucket Server pull requests' ) ;
94
+ }
95
+
96
+ const data = await res . json ( ) ;
97
+
98
+ return {
99
+ providerUser : data . user as Account ,
100
+ pullRequests : ( data . body . values as any [ ] ) . map ( pullRequest => ( {
101
+ ...BitbucketServerUtils . restApiPullRequestToCommonPullRequest ( pullRequest ) ,
102
+ // Bitbucket Server PR ids are just the number, they are not unique across repos, so instead
103
+ // we use the PR url as the id.
104
+ id : pullRequest . links . self [ 0 ] . href ,
105
+ uuid : '' ,
106
+ } ) ) ,
107
+ } ;
108
+ } ;
109
+
77
110
const fetchAzureFocusViewData = async ( token : ProviderToken ) => {
78
111
const azureDevOps = new AzureDevOps ( { token : token . accessToken } ) ;
79
112
@@ -109,6 +142,8 @@ export const fetchFocusViewData = async (provider: FocusViewSupportedProvider):
109
142
return fetchGitLabFocusViewData ( providerToken ) ;
110
143
case 'bitbucket' :
111
144
return fetchBitbucketFocusViewData ( providerToken ) ;
145
+ case 'bitbucketServer' :
146
+ return fetchBitbucketServerFocusViewData ( providerToken ) ;
112
147
case 'azure' :
113
148
return fetchAzureFocusViewData ( providerToken ) ;
114
149
default :
0 commit comments