UNPKG

3.99 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const _ = require("lodash");
4const request = require("request");
5const code_repository_1 = require("./code-repository");
6class 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}
99exports.Bitbucket = Bitbucket;
100//# sourceMappingURL=bitbucket.js.map
\No newline at end of file