1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const _ = require("lodash");
|
4 | const request = require("request");
|
5 | const code_repository_1 = require("./code-repository");
|
6 | class Bitbucket {
|
7 | constructor(credentials) {
|
8 | this.credentials = credentials;
|
9 | if (credentials.authType !== code_repository_1.RepoCredentialsType.BASIC.toString())
|
10 | throw new Error("Only BASIC authorization method is supported at this moment");
|
11 | this.baseUrl = `https://${this.credentials.username}:${this.credentials.password}@api.bitbucket.org/2.0`;
|
12 | }
|
13 | listTeams() {
|
14 | return new Promise((resolve, reject) => {
|
15 | request({
|
16 | url: `${this.baseUrl}/teams?role=member&pagelen=100`,
|
17 | json: true
|
18 | }, (err, response) => {
|
19 | if (err)
|
20 | return reject(err);
|
21 | resolve(_.map(response.body.values, (team) => ({
|
22 | name: team.username,
|
23 | displayName: team.display_name
|
24 | })));
|
25 | });
|
26 | });
|
27 | }
|
28 | listRepositories() {
|
29 | return this.listPrivateRepositories().then(privateRepos => {
|
30 | return this.listTeams().then(teams => {
|
31 | return this.listAllRepositories(_.map(teams, team => team.name), privateRepos);
|
32 | });
|
33 | });
|
34 | }
|
35 | listAllRepositories(accounts, repositories = []) {
|
36 | const accountPromises = _.map(accounts, account => {
|
37 | return new Promise((resolve, reject) => {
|
38 | request({
|
39 | url: `${this.baseUrl}/teams/${account}/repositories?pagelen=100`,
|
40 | json: true
|
41 | }, (err, response) => {
|
42 | if (err)
|
43 | return reject(err);
|
44 | const repos = _.map(response.body.values, (repo) => ({
|
45 | name: repo.name,
|
46 | fullName: repo.full_name,
|
47 | description: repo.description,
|
48 | downloadUrl: repo.links.downloads.href
|
49 | }));
|
50 | return resolve(repos);
|
51 | });
|
52 | });
|
53 | });
|
54 | return Promise.all(accountPromises).then(result => {
|
55 | return _.flatten(result);
|
56 | });
|
57 | }
|
58 | listPrivateRepositories() {
|
59 | return new Promise((resolve, reject) => {
|
60 | request({
|
61 | url: `${this.baseUrl}/repositories/${this.credentials.username}`,
|
62 | json: true
|
63 | }, (err, response) => {
|
64 | if (err)
|
65 | return reject(err);
|
66 | resolve(_.map(response.body.values, (repo) => ({
|
67 | name: repo.name,
|
68 | fullName: repo.full_name,
|
69 | downloadUrl: repo.links.downloads.href
|
70 | })));
|
71 | });
|
72 | });
|
73 | }
|
74 | listVersions(repoName) {
|
75 | return new Promise((resolve, reject) => {
|
76 | request({
|
77 | url: `${this.baseUrl}/repositories${repoName}/refs/tags?pagelen=100`,
|
78 | json: true
|
79 | }, (err, response) => {
|
80 | if (err)
|
81 | return reject(err);
|
82 | resolve(_.map(response.body.values, (version) => ({
|
83 | name: version.name,
|
84 | message: version.message,
|
85 | date: new Date(version.date),
|
86 | author: {
|
87 | name: version.target.author.user.display_name,
|
88 | username: version.target.author.user.username,
|
89 | avatar: version.target.author.user.links.avatar.href
|
90 | }
|
91 | })));
|
92 | });
|
93 | });
|
94 | }
|
95 | downloadVersion(repoName, version) {
|
96 | return request(`https://${this.credentials.username}:${this.credentials.password}@bitbucket.org${repoName}/get/${version}.zip`);
|
97 | }
|
98 | }
|
99 | exports.Bitbucket = Bitbucket;
|
100 |
|
\ | No newline at end of file |