Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@vssue/api-gitlab-v4

Package Overview
Dependencies
Maintainers
1
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@vssue/api-gitlab-v4 - npm Package Compare versions

Comparing version 0.1.9 to 0.2.0

324

lib/index.js

@@ -17,3 +17,3 @@ import * as tslib_1 from "tslib";

this.repo = repo;
this.labels = labels;
this.labels = labels.join(',');
this.clientId = clientId;

@@ -31,2 +31,5 @@ this.clientSecret = clientSecret;

Object.defineProperty(GitlabV4.prototype, "platform", {
/**
* The platform api info
*/
get: function () {

@@ -37,2 +40,6 @@ return {

version: 'v4',
meta: {
reactable: true,
sortable: true,
},
};

@@ -43,3 +50,6 @@ },

});
GitlabV4.prototype.redirectAuthorize = function () {
/**
* Redirect to the authorization page of platform.
*/
GitlabV4.prototype.redirectAuth = function () {
window.location.href = buildURL(concatURL(this.baseURL, 'oauth/authorize'), {

@@ -52,3 +62,11 @@ client_id: this.clientId,

};
GitlabV4.prototype.handleAuthorize = function () {
/**
* Handle authorization.
*
* @remarks
* If the `code` and `state` exist in the query, and the `state` matches, remove them from query, and try to get the access token.
*
* @return A string for access token, `null` for no authorization code
*/
GitlabV4.prototype.handleAuth = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {

@@ -78,6 +96,13 @@ var query, code, replaceURL, accessToken;

};
/**
* Get user access token via `code`
*
* @param options.code - The code from the query
*
* @return User access token
*/
GitlabV4.prototype.getAccessToken = function (_a) {
var code = _a.code;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var response, accessToken;
var data;
return tslib_1.__generator(this, function (_b) {

@@ -93,5 +118,4 @@ switch (_b.label) {

case 1:
response = _b.sent();
accessToken = response.data.access_token;
return [2 /*return*/, accessToken];
data = (_b.sent()).data;
return [2 /*return*/, data.access_token];
}

@@ -101,6 +125,13 @@ });

};
/**
* Get the logined user with access token.
*
* @param options.accessToken - User access token
*
* @return The user
*/
GitlabV4.prototype.getUser = function (_a) {
var accessToken = _a.accessToken;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var response, user;
var data;
return tslib_1.__generator(this, function (_b) {

@@ -112,5 +143,4 @@ switch (_b.label) {

case 1:
response = _b.sent();
user = response.data;
return [2 /*return*/, normalizeUser(user)];
data = (_b.sent()).data;
return [2 /*return*/, normalizeUser(data)];
}

@@ -120,16 +150,19 @@ });

};
GitlabV4.prototype.getIssues = function (_a) {
var accessToken = _a.accessToken;
/**
* Get issue of this page according to the issue id or the issue title
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.issueTitle - The title of issue
*
* @return The raw response of issue
*/
GitlabV4.prototype.getIssue = function (_a) {
var accessToken = _a.accessToken, issueId = _a.issueId, issueTitle = _a.issueTitle;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var options, response, issues;
var options, data, e_1, data, issue;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
options = {
params: {
labels: this.labels,
// to avoid caching
timestamp: Date.now(),
},
};
options = {};
if (accessToken) {

@@ -140,7 +173,33 @@ options.headers = {

}
if (!issueId) return [3 /*break*/, 5];
_b.label = 1;
case 1:
_b.trys.push([1, 3, , 4]);
return [4 /*yield*/, this.$http.get("api/v4/projects/" + this._encodedRepo + "/issues/" + issueId, options)];
case 2:
data = (_b.sent()).data;
return [2 /*return*/, normalizeIssue(data)];
case 3:
e_1 = _b.sent();
if (e_1.response && e_1.response.status === 404) {
return [2 /*return*/, null];
}
else {
throw e_1;
}
return [3 /*break*/, 4];
case 4: return [3 /*break*/, 7];
case 5:
options.params = {
labels: this.labels,
order_by: 'created_at',
sort: 'asc',
search: issueTitle,
};
return [4 /*yield*/, this.$http.get("api/v4/projects/" + this._encodedRepo + "/issues", options)];
case 1:
response = _b.sent();
issues = response.data;
return [2 /*return*/, issues.map(normalizeIssue)];
case 6:
data = (_b.sent()).data;
issue = data.map(normalizeIssue).find(function (item) { return item.title === issueTitle; });
return [2 /*return*/, issue || null];
case 7: return [2 /*return*/];
}

@@ -150,14 +209,26 @@ });

};
/**
* Get comments of this page according to the issue id or the issue title
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.query - The query parameters
*
* @return The comments
*/
GitlabV4.prototype.getComments = function (_a) {
var issueId = _a.issueId, accessToken = _a.accessToken;
var accessToken = _a.accessToken, issueId = _a.issueId, _b = _a.query, _c = _b === void 0 ? {} : _b, _d = _c.page, page = _d === void 0 ? 1 : _d, _e = _c.perPage, perPage = _e === void 0 ? 10 : _e, _f = _c.sort, sort = _f === void 0 ? 'desc' : _f;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var e_1, _b, options, response, comments, getCommentsMeta, _loop_1, comments_1, comments_1_1, comment;
var e_2, _g, options, response, commentsRaw, getCommentsMeta, _loop_1, commentsRaw_1, commentsRaw_1_1, comment;
var _this = this;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
return tslib_1.__generator(this, function (_h) {
switch (_h.label) {
case 0:
options = {
params: {
// to avoid caching
timestamp: Date.now(),
// pagination
'page': page,
'per_page': perPage,
'order_by': 'created_at',
'sort': sort,
},

@@ -172,4 +243,4 @@ };

case 1:
response = _c.sent();
comments = response.data;
response = _h.sent();
commentsRaw = response.data;
getCommentsMeta = [];

@@ -184,2 +255,3 @@ _loop_1 = function (comment) {

return [4 /*yield*/, this.getMarkdownContent({
accessToken: accessToken,
contentRaw: comment.body,

@@ -200,5 +272,5 @@ })];

return [4 /*yield*/, this.getCommentReactions({
accessToken: accessToken,
issueId: issueId,
commentId: comment.id,
accessToken: accessToken,
})];

@@ -213,18 +285,23 @@ case 1:

try {
for (comments_1 = tslib_1.__values(comments), comments_1_1 = comments_1.next(); !comments_1_1.done; comments_1_1 = comments_1.next()) {
comment = comments_1_1.value;
for (commentsRaw_1 = tslib_1.__values(commentsRaw), commentsRaw_1_1 = commentsRaw_1.next(); !commentsRaw_1_1.done; commentsRaw_1_1 = commentsRaw_1.next()) {
comment = commentsRaw_1_1.value;
_loop_1(comment);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (comments_1_1 && !comments_1_1.done && (_b = comments_1.return)) _b.call(comments_1);
if (commentsRaw_1_1 && !commentsRaw_1_1.done && (_g = commentsRaw_1.return)) _g.call(commentsRaw_1);
}
finally { if (e_1) throw e_1.error; }
finally { if (e_2) throw e_2.error; }
}
return [4 /*yield*/, Promise.all(getCommentsMeta)];
case 2:
_c.sent();
return [2 /*return*/, comments.map(normalizeComment)];
_h.sent();
return [2 /*return*/, {
count: Number(response.headers['x-total']),
page: Number(response.headers['x-page']),
perPage: Number(response.headers['x-per-page']),
data: commentsRaw.map(normalizeComment),
}];
}

@@ -234,16 +311,55 @@ });

};
/**
* Get the parse HTML of markdown content
*
* @param options.accessToken - User access token
* @param options.contentRaw - The id of issue
*
* @return `true` if succeed, `false` if failed
*/
GitlabV4.prototype.getMarkdownContent = function (_a) {
var accessToken = _a.accessToken, contentRaw = _a.contentRaw;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var options, data;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
options = {};
if (accessToken) {
options.headers = {
'Authorization': "Bearer " + accessToken,
};
}
return [4 /*yield*/, this.$http.post("api/v4/markdown", {
text: contentRaw,
gfm: true,
}, options)];
case 1:
data = (_b.sent()).data;
return [2 /*return*/, data.html];
}
});
});
};
/**
* Get reactions of a cooment
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.commentId - The id of comment
*
* @return The comments
*/
GitlabV4.prototype.getCommentReactions = function (_a) {
var issueId = _a.issueId, commentId = _a.commentId, accessToken = _a.accessToken;
var accessToken = _a.accessToken, issueId = _a.issueId, commentId = _a.commentId;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var response, reactions;
var data;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.$http.get("api/v4/projects/" + this._encodedRepo + "/issues/" + issueId + "/notes/" + commentId + "/award_emoji", {
params: {},
headers: { 'Authorization': "Bearer " + accessToken },
})];
case 1:
response = _b.sent();
reactions = response.data;
return [2 /*return*/, normalizeReactions(reactions)];
data = (_b.sent()).data;
return [2 /*return*/, normalizeReactions(data)];
}

@@ -253,6 +369,15 @@ });

};
/**
* Create a new issue
*
* @param options.accessToken - User access token
* @param options.title - The title of issue
* @param options.content - The content of issue
*
* @return The created issue
*/
GitlabV4.prototype.createIssue = function (_a) {
var title = _a.title, content = _a.content, accessToken = _a.accessToken;
var accessToken = _a.accessToken, title = _a.title, content = _a.content;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var response, issue;
var data;
return tslib_1.__generator(this, function (_b) {

@@ -268,5 +393,4 @@ switch (_b.label) {

case 1:
response = _b.sent();
issue = response.data;
return [2 /*return*/, normalizeIssue(issue)];
data = (_b.sent()).data;
return [2 /*return*/, normalizeIssue(data)];
}

@@ -276,6 +400,15 @@ });

};
GitlabV4.prototype.createIssueComment = function (_a) {
var issueId = _a.issueId, content = _a.content, accessToken = _a.accessToken;
/**
* Create a new comment
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.content - The content of comment
*
* @return The created comment
*/
GitlabV4.prototype.createComment = function (_a) {
var accessToken = _a.accessToken, issueId = _a.issueId, content = _a.content;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var response, comment;
var data;
return tslib_1.__generator(this, function (_b) {

@@ -289,5 +422,4 @@ switch (_b.label) {

case 1:
response = _b.sent();
comment = response.data;
return [2 /*return*/, normalizeComment(comment)];
data = (_b.sent()).data;
return [2 /*return*/, normalizeComment(data)];
}

@@ -297,6 +429,15 @@ });

};
/**
* Create a new reaction of issue
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.reaction - The reaction
*
* @return `true` if succeed, `false` if already token
*/
GitlabV4.prototype.createIssueReaction = function (_a) {
var issueId = _a.issueId, reaction = _a.reaction, accessToken = _a.accessToken;
var accessToken = _a.accessToken, issueId = _a.issueId, reaction = _a.reaction;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var e_2;
var response, e_3;
return tslib_1.__generator(this, function (_b) {

@@ -312,7 +453,13 @@ switch (_b.label) {

case 1:
_b.sent();
return [2 /*return*/, true];
response = _b.sent();
return [2 /*return*/, response.status === 201];
case 2:
e_2 = _b.sent();
return [2 /*return*/, false];
e_3 = _b.sent();
if (e_3.response && e_3.response.status === 404) {
return [2 /*return*/, false];
}
else {
throw e_3;
}
return [3 /*break*/, 3];
case 3: return [2 /*return*/];

@@ -323,6 +470,16 @@ }

};
/**
* Create a new reaction of comment
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.commentId - The id of comment
* @param options.reaction - The reaction
*
* @return `true` if succeed, `false` if already token
*/
GitlabV4.prototype.createCommentReaction = function (_a) {
var issueId = _a.issueId, commentId = _a.commentId, reaction = _a.reaction, accessToken = _a.accessToken;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var e_3;
var response, e_4;
return tslib_1.__generator(this, function (_b) {

@@ -340,7 +497,16 @@ switch (_b.label) {

case 1:
_b.sent();
return [2 /*return*/, true];
response = _b.sent();
return [2 /*return*/, response.status === 201];
case 2:
e_3 = _b.sent();
return [2 /*return*/, false];
e_4 = _b.sent();
// it could be a bug of gitlab
// if a reaction (award emoji) has already existed, it returns a 404 response with a buggy message
// have submitted a issue: https://gitlab.com/gitlab-org/gitlab-ce/issues/56147
if (e_4.response && e_4.response.status === 404) {
return [2 /*return*/, false];
}
else {
throw e_4;
}
return [3 /*break*/, 3];
case 3: return [2 /*return*/];

@@ -351,23 +517,5 @@ }

};
GitlabV4.prototype.getMarkdownContent = function (_a) {
var contentRaw = _a.contentRaw;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var response, content;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.$http.post("api/v4/markdown", {
text: contentRaw,
gfm: true,
})];
case 1:
response = _b.sent();
content = response.data.html;
return [2 /*return*/, content];
}
});
});
};
return GitlabV4;
}());
export default GitlabV4;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQU1BLE9BQU8sS0FHTixNQUFNLE9BQU8sQ0FBQTtBQUVkLE9BQU8sRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxVQUFVLEdBQ1gsTUFBTSxjQUFjLENBQUE7QUFFckIsT0FBTyxFQUNMLGFBQWEsRUFDYixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixlQUFlLEdBQ2hCLE1BQU0sU0FBUyxDQUFBO0FBRWhCOzs7OztHQUtHO0FBQ0g7SUFvQkUsa0JBQWEsRUFRSztZQVBoQixlQUE4QixFQUE5QixtREFBOEIsRUFDOUIsZ0JBQUssRUFDTCxjQUFJLEVBQ0osa0JBQU0sRUFDTixzQkFBUSxFQUNSLDhCQUFZLEVBQ1osZ0JBQUs7UUFFTCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUVwQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUVsQixJQUFJLENBQUMsWUFBWSxHQUFHLGtCQUFrQixDQUFJLElBQUksQ0FBQyxLQUFLLFNBQUksSUFBSSxDQUFDLElBQU0sQ0FBQyxDQUFBO1FBRXBFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN4QixPQUFPLFNBQUE7WUFDUCxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjthQUM3QjtTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFsQ0Qsc0JBQUksOEJBQVE7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cHRpb25zLFxufSBmcm9tICd2c3N1ZSdcblxuaW1wb3J0IGF4aW9zLCB7XG4gIEF4aW9zSW5zdGFuY2UsXG4gIEF4aW9zUmVxdWVzdENvbmZpZyxcbn0gZnJvbSAnYXhpb3MnXG5cbmltcG9ydCB7XG4gIGJ1aWxkVVJMLFxuICBjb25jYXRVUkwsXG4gIGdldENsZWFuVVJMLFxuICBwYXJzZVF1ZXJ5LFxufSBmcm9tICdAdnNzdWUvdXRpbHMnXG5cbmltcG9ydCB7XG4gIG5vcm1hbGl6ZVVzZXIsXG4gIG5vcm1hbGl6ZUlzc3VlLFxuICBub3JtYWxpemVDb21tZW50LFxuICBub3JtYWxpemVSZWFjdGlvbnMsXG4gIG1hcFJlYWN0aW9uTmFtZSxcbn0gZnJvbSAnLi91dGlscydcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRsYWIuY29tL2NlL2FwaS9vYXV0aDIuaHRtbFxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9jZS9hcGkvaXNzdWVzLmh0bWxcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vY2UvYXBpL25vdGVzLmh0bWxcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vY2UvYXBpL2F3YXJkX2Vtb2ppLmh0bWxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2l0bGFiVjQgaW1wbGVtZW50cyBWc3N1ZUFQSSB7XG4gIGJhc2VVUkw6IHN0cmluZ1xuICBvd25lcjogc3RyaW5nXG4gIHJlcG86IHN0cmluZ1xuICBsYWJlbHM6IHN0cmluZ1xuICBjbGllbnRJZDogc3RyaW5nXG4gIGNsaWVudFNlY3JldDogc3RyaW5nXG4gIHN0YXRlOiBzdHJpbmdcbiAgJGh0dHA6IEF4aW9zSW5zdGFuY2VcblxuICBwcml2YXRlIF9lbmNvZGVkUmVwbzogc3RyaW5nXG5cbiAgZ2V0IHBsYXRmb3JtICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0dpdExhYicsXG4gICAgICBsaW5rOiB0aGlzLmJhc2VVUkwsXG4gICAgICB2ZXJzaW9uOiAndjQnLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yICh7XG4gICAgYmFzZVVSTCA9ICdodHRwczovL2dpdGxhYi5jb20nLFxuICAgIG93bmVyLFxuICAgIHJlcG8sXG4gICAgbGFiZWxzLFxuICAgIGNsaWVudElkLFxuICAgIGNsaWVudFNlY3JldCxcbiAgICBzdGF0ZSxcbiAgfTogVnNzdWVBUElPcHRpb25zKSB7XG4gICAgdGhpcy5iYXNlVVJMID0gYmFzZVVSTFxuICAgIHRoaXMub3duZXIgPSBvd25lclxuICAgIHRoaXMucmVwbyA9IHJlcG9cbiAgICB0aGlzLmxhYmVscyA9IGxhYmVsc1xuXG4gICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudElkXG4gICAgdGhpcy5jbGllbnRTZWNyZXQgPSBjbGllbnRTZWNyZXRcbiAgICB0aGlzLnN0YXRlID0gc3RhdGVcblxuICAgIHRoaXMuX2VuY29kZWRSZXBvID0gZW5jb2RlVVJJQ29tcG9uZW50KGAke3RoaXMub3duZXJ9LyR7dGhpcy5yZXBvfWApXG5cbiAgICB0aGlzLiRodHRwID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICByZWRpcmVjdEF1dGhvcml6ZSAoKSB7XG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBidWlsZFVSTChjb25jYXRVUkwodGhpcy5iYXNlVVJMLCAnb2F1dGgvYXV0aG9yaXplJyksIHtcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIHJlZGlyZWN0X3VyaTogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICByZXNwb25zZV90eXBlOiAnY29kZScsXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlQXV0aG9yaXplICgpIHtcbiAgICBjb25zdCBxdWVyeSA9IHBhcnNlUXVlcnkod2luZG93LmxvY2F0aW9uLnNlYXJjaClcbiAgICBpZiAocXVlcnkuY29kZSkge1xuICAgICAgaWYgKHF1ZXJ5LnN0YXRlICE9PSB0aGlzLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBjb25zdCBjb2RlID0gcXVlcnkuY29kZVxuICAgICAgZGVsZXRlIHF1ZXJ5LmNvZGVcbiAgICAgIGRlbGV0ZSBxdWVyeS5zdGF0ZVxuICAgICAgY29uc3QgcmVwbGFjZVVSTCA9IGJ1aWxkVVJMKGdldENsZWFuVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSwgcXVlcnkpICsgd2luZG93LmxvY2F0aW9uLmhhc2hcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgcmVwbGFjZVVSTClcbiAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbih7IGNvZGUgfSlcbiAgICAgIHJldHVybiBhY2Nlc3NUb2tlblxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgYXN5bmMgZ2V0QWNjZXNzVG9rZW4gKHsgY29kZSB9KSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLiRodHRwLnBvc3QoYGh0dHBzOi8vY29ycy1hbnl3aGVyZS5oZXJva3VhcHAuY29tLyR7Y29uY2F0VVJMKHRoaXMuYmFzZVVSTCwgJ29hdXRoL3Rva2VuJyl9YCwge1xuICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5jbGllbnRTZWNyZXQsXG4gICAgICBjb2RlLFxuICAgICAgZ3JhbnRfdHlwZTogJ2F1dGhvcml6YXRpb25fY29kZScsXG4gICAgICByZWRpcmVjdF91cmk6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgIH0pXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSByZXNwb25zZS5kYXRhLmFjY2Vzc190b2tlblxuICAgIHJldHVybiBhY2Nlc3NUb2tlblxuICB9XG5cbiAgYXN5bmMgZ2V0VXNlciAoeyBhY2Nlc3NUb2tlbiB9KSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLiRodHRwLmdldCgnYXBpL3Y0L3VzZXInLCB7XG4gICAgICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAgfSxcbiAgICB9KVxuICAgIGNvbnN0IHVzZXIgPSByZXNwb25zZS5kYXRhXG4gICAgcmV0dXJuIG5vcm1hbGl6ZVVzZXIodXNlcilcbiAgfVxuXG4gIGFzeW5jIGdldElzc3VlcyAoeyBhY2Nlc3NUb2tlbiB9KSB7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGxhYmVsczogdGhpcy5sYWJlbHMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGNhY2hpbmdcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgfSxcbiAgICB9XG4gICAgaWYgKGFjY2Vzc1Rva2VuKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAsXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy4kaHR0cC5nZXQoYGFwaS92NC9wcm9qZWN0cy8ke3RoaXMuX2VuY29kZWRSZXBvfS9pc3N1ZXNgLCBvcHRpb25zKVxuICAgIGNvbnN0IGlzc3VlcyA9IHJlc3BvbnNlLmRhdGFcbiAgICByZXR1cm4gaXNzdWVzLm1hcChub3JtYWxpemVJc3N1ZSlcbiAgfVxuXG4gIGFzeW5jIGdldENvbW1lbnRzICh7XG4gICAgaXNzdWVJZCxcbiAgICBhY2Nlc3NUb2tlbixcbiAgfSkge1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICAvLyB0byBhdm9pZCBjYWNoaW5nXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGlmIChhY2Nlc3NUb2tlbikge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuJGh0dHAuZ2V0KGBhcGkvdjQvcHJvamVjdHMvJHt0aGlzLl9lbmNvZGVkUmVwb30vaXNzdWVzLyR7aXNzdWVJZH0vbm90ZXNgLCBvcHRpb25zKVxuICAgIGNvbnN0IGNvbW1lbnRzID0gcmVzcG9uc2UuZGF0YVxuXG4gICAgY29uc3QgZ2V0Q29tbWVudHNNZXRhOiBBcnJheTxQcm9taXNlPHZvaWQ+PiA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgY29tbWVudHMpIHtcbiAgICAgIGdldENvbW1lbnRzTWV0YS5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbW1lbnQuYm9keV9odG1sID0gYXdhaXQgdGhpcy5nZXRNYXJrZG93bkNvbnRlbnQoe1xuICAgICAgICAgIGNvbnRlbnRSYXc6IGNvbW1lbnQuYm9keSxcbiAgICAgICAgfSlcbiAgICAgIH0pKCkpXG4gICAgICBnZXRDb21tZW50c01ldGEucHVzaCgoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb21tZW50LnJlYWN0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0Q29tbWVudFJlYWN0aW9ucyh7XG4gICAgICAgICAgaXNzdWVJZDogaXNzdWVJZCxcbiAgICAgICAgICBjb21tZW50SWQ6IGNvbW1lbnQuaWQsXG4gICAgICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgICB9KVxuICAgICAgfSkoKSlcbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZ2V0Q29tbWVudHNNZXRhKVxuICAgIHJldHVybiBjb21tZW50cy5tYXAobm9ybWFsaXplQ29tbWVudClcbiAgfVxuXG4gIGFzeW5jIGdldENvbW1lbnRSZWFjdGlvbnMgKHtcbiAgICBpc3N1ZUlkLFxuICAgIGNvbW1lbnRJZCxcbiAgICBhY2Nlc3NUb2tlbixcbiAgfSk6IFByb21pc2U8UmVhY3Rpb25zPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLiRodHRwLmdldChgYXBpL3Y0L3Byb2plY3RzLyR7dGhpcy5fZW5jb2RlZFJlcG99L2lzc3Vlcy8ke2lzc3VlSWR9L25vdGVzLyR7Y29tbWVudElkfS9hd2FyZF9lbW9qaWAsIHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgfSxcbiAgICAgIGhlYWRlcnM6IHsgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCB9LFxuICAgIH0pXG5cbiAgICBjb25zdCByZWFjdGlvbnMgPSByZXNwb25zZS5kYXRhXG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJlYWN0aW9ucyhyZWFjdGlvbnMpXG4gIH1cblxuICBhc3luYyBjcmVhdGVJc3N1ZSAoe1xuICAgIHRpdGxlLFxuICAgIGNvbnRlbnQsXG4gICAgYWNjZXNzVG9rZW4sXG4gIH0pIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuJGh0dHAucG9zdChgYXBpL3Y0L3Byb2plY3RzLyR7dGhpcy5fZW5jb2RlZFJlcG99L2lzc3Vlc2AsIHtcbiAgICAgIHRpdGxlLFxuICAgICAgZGVzY3JpcHRpb246IGNvbnRlbnQsXG4gICAgICBsYWJlbHM6IHRoaXMubGFiZWxzLFxuICAgIH0sIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCB9LFxuICAgIH0pXG4gICAgY29uc3QgaXNzdWUgPSByZXNwb25zZS5kYXRhXG4gICAgcmV0dXJuIG5vcm1hbGl6ZUlzc3VlKGlzc3VlKVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlSXNzdWVDb21tZW50ICh7XG4gICAgaXNzdWVJZCxcbiAgICBjb250ZW50LFxuICAgIGFjY2Vzc1Rva2VuLFxuICB9KSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLiRodHRwLnBvc3QoYGFwaS92NC9wcm9qZWN0cy8ke3RoaXMuX2VuY29kZWRSZXBvfS9pc3N1ZXMvJHtpc3N1ZUlkfS9ub3Rlc2AsIHtcbiAgICAgIGJvZHk6IGNvbnRlbnQsXG4gICAgfSwge1xuICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIH0sXG4gICAgfSlcbiAgICBjb25zdCBjb21tZW50ID0gcmVzcG9uc2UuZGF0YVxuICAgIHJldHVybiBub3JtYWxpemVDb21tZW50KGNvbW1lbnQpXG4gIH1cblxuICBhc3luYyBjcmVhdGVJc3N1ZVJlYWN0aW9uICh7XG4gICAgaXNzdWVJZCxcbiAgICByZWFjdGlvbixcbiAgICBhY2Nlc3NUb2tlbixcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLiRodHRwLnBvc3QoYGFwaS92NC9wcm9qZWN0cy8ke3RoaXMuX2VuY29kZWRSZXBvfS9pc3N1ZXMvJHtpc3N1ZUlkfS9hd2FyZF9lbW9qaWAsIHtcbiAgICAgICAgbmFtZTogbWFwUmVhY3Rpb25OYW1lKHJlYWN0aW9uKSxcbiAgICAgIH0sIHtcbiAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIH0sXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVDb21tZW50UmVhY3Rpb24gKHtcbiAgICBpc3N1ZUlkLFxuICAgIGNvbW1lbnRJZCxcbiAgICByZWFjdGlvbixcbiAgICBhY2Nlc3NUb2tlbixcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLiRodHRwLnBvc3QoYGFwaS92NC9wcm9qZWN0cy8ke3RoaXMuX2VuY29kZWRSZXBvfS9pc3N1ZXMvJHtpc3N1ZUlkfS9ub3Rlcy8ke2NvbW1lbnRJZH0vYXdhcmRfZW1vamlgLCB7XG4gICAgICAgIG5hbWU6IG1hcFJlYWN0aW9uTmFtZShyZWFjdGlvbiksXG4gICAgICB9LCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0TWFya2Rvd25Db250ZW50ICh7IGNvbnRlbnRSYXcgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLiRodHRwLnBvc3QoYGFwaS92NC9tYXJrZG93bmAsIHtcbiAgICAgIHRleHQ6IGNvbnRlbnRSYXcsXG4gICAgICBnZm06IHRydWUsXG4gICAgfSlcbiAgICBjb25zdCBjb250ZW50ID0gcmVzcG9uc2UuZGF0YS5odG1sXG4gICAgcmV0dXJuIGNvbnRlbnRcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUtBLE9BQU8sS0FHTixNQUFNLE9BQU8sQ0FBQTtBQUVkLE9BQU8sRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxVQUFVLEdBQ1gsTUFBTSxjQUFjLENBQUE7QUFFckIsT0FBTyxFQUNMLGFBQWEsRUFDYixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixlQUFlLEdBQ2hCLE1BQU0sU0FBUyxDQUFBO0FBRWhCOzs7OztHQUtHO0FBQ0g7SUFZRSxrQkFBYSxFQVFLO1lBUGhCLGVBQThCLEVBQTlCLG1EQUE4QixFQUM5QixnQkFBSyxFQUNMLGNBQUksRUFDSixrQkFBTSxFQUNOLHNCQUFRLEVBQ1IsOEJBQVksRUFDWixnQkFBSztRQUVMLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUU5QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUVsQixJQUFJLENBQUMsWUFBWSxHQUFHLGtCQUFrQixDQUFJLElBQUksQ0FBQyxLQUFLLFNBQUksSUFBSSxDQUFDLElBQU0sQ0FBQyxDQUFBO1FBRXBFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN4QixPQUFPLFNBQUE7WUFDUCxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjthQUM3QjtTQUNGLENBQUMsQ0FBQTtJQUNK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SyxDQUFDLElBQUksQ0FBQyxxQkFBbUIsSUFBSSxDQUFDLFlBQVksZ0JBQVcsT0FBTyxlQUFVLFNBQVMsaUJBQWMsRUFBRTtnQ0FDOUgsSUFBSSxFQUFFLGVBQWUsQ0FBQyxRQUFRLENBQUM7NkJBQ2hDLEVBQUU7Z0NBQ0QsT0FBTyxFQUFFO29DQUNQLGVBQWUsRUFBRSxZQUFVLFdBQWE7aUNBQ3pDOzZCQUNGLENBQUMsRUFBQTs7d0JBTkksUUFBUSxHQUFHLFNBTWY7d0JBQ0Ysc0JBQU8sUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUE7Ozt3QkFFOUIsOEJBQThCO3dCQUM5QixrR0FBa0c7d0JBQ2xHLCtFQUErRTt3QkFDL0UsSUFBSSxHQUFDLENBQUMsUUFBUSxJQUFJLEdBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDM0Msc0JBQU8sS0FBSyxFQUFBO3lCQUNiOzZCQUFNOzRCQUNMLE1BQU0sR0FBQyxDQUFBO3lCQUNSOzs7Ozs7S0FFSjtJQUNILGVBQUM7QUFBRCxDQUFDLEFBNVlELElBNFlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgVnNzdWVBUEksXG4gIFZzc3VlQVBJT3B0aW9ucyxcbn0gZnJvbSAndnNzdWUnXG5cbmltcG9ydCBheGlvcywge1xuICBBeGlvc0luc3RhbmNlLFxuICBBeGlvc1JlcXVlc3RDb25maWcsXG59IGZyb20gJ2F4aW9zJ1xuXG5pbXBvcnQge1xuICBidWlsZFVSTCxcbiAgY29uY2F0VVJMLFxuICBnZXRDbGVhblVSTCxcbiAgcGFyc2VRdWVyeSxcbn0gZnJvbSAnQHZzc3VlL3V0aWxzJ1xuXG5pbXBvcnQge1xuICBub3JtYWxpemVVc2VyLFxuICBub3JtYWxpemVJc3N1ZSxcbiAgbm9ybWFsaXplQ29tbWVudCxcbiAgbm9ybWFsaXplUmVhY3Rpb25zLFxuICBtYXBSZWFjdGlvbk5hbWUsXG59IGZyb20gJy4vdXRpbHMnXG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9jZS9hcGkvb2F1dGgyLmh0bWxcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vY2UvYXBpL2lzc3Vlcy5odG1sXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRsYWIuY29tL2NlL2FwaS9ub3Rlcy5odG1sXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRsYWIuY29tL2NlL2FwaS9hd2FyZF9lbW9qaS5odG1sXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdpdGxhYlY0IGltcGxlbWVudHMgVnNzdWVBUEkuSW5zdGFuY2Uge1xuICBiYXNlVVJMOiBzdHJpbmdcbiAgb3duZXI6IHN0cmluZ1xuICByZXBvOiBzdHJpbmdcbiAgbGFiZWxzOiBzdHJpbmdcbiAgY2xpZW50SWQ6IHN0cmluZ1xuICBjbGllbnRTZWNyZXQ6IHN0cmluZ1xuICBzdGF0ZTogc3RyaW5nXG4gICRodHRwOiBBeGlvc0luc3RhbmNlXG5cbiAgcHJpdmF0ZSBfZW5jb2RlZFJlcG86IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yICh7XG4gICAgYmFzZVVSTCA9ICdodHRwczovL2dpdGxhYi5jb20nLFxuICAgIG93bmVyLFxuICAgIHJlcG8sXG4gICAgbGFiZWxzLFxuICAgIGNsaWVudElkLFxuICAgIGNsaWVudFNlY3JldCxcbiAgICBzdGF0ZSxcbiAgfTogVnNzdWVBUElPcHRpb25zKSB7XG4gICAgdGhpcy5iYXNlVVJMID0gYmFzZVVSTFxuICAgIHRoaXMub3duZXIgPSBvd25lclxuICAgIHRoaXMucmVwbyA9IHJlcG9cbiAgICB0aGlzLmxhYmVscyA9IGxhYmVscy5qb2luKCcsJylcblxuICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZFxuICAgIHRoaXMuY2xpZW50U2VjcmV0ID0gY2xpZW50U2VjcmV0XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlXG5cbiAgICB0aGlzLl9lbmNvZGVkUmVwbyA9IGVuY29kZVVSSUNvbXBvbmVudChgJHt0aGlzLm93bmVyfS8ke3RoaXMucmVwb31gKVxuXG4gICAgdGhpcy4kaHR0cCA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwbGF0Zm9ybSBhcGkgaW5mb1xuICAgKi9cbiAgZ2V0IHBsYXRmb3JtICgpOiBWc3N1ZUFQSS5QbGF0Zm9ybSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdHaXRMYWInLFxuICAgICAgbGluazogdGhpcy5iYXNlVVJMLFxuICAgICAgdmVyc2lvbjogJ3Y0JyxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgcmVhY3RhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0IHRvIHRoZSBhdXRob3JpemF0aW9uIHBhZ2Ugb2YgcGxhdGZvcm0uXG4gICAqL1xuICByZWRpcmVjdEF1dGggKCk6IHZvaWQge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYnVpbGRVUkwoY29uY2F0VVJMKHRoaXMuYmFzZVVSTCwgJ29hdXRoL2F1dGhvcml6ZScpLCB7XG4gICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICByZWRpcmVjdF91cmk6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgcmVzcG9uc2VfdHlwZTogJ2NvZGUnLFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYXV0aG9yaXphdGlvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgdGhlIGBjb2RlYCBhbmQgYHN0YXRlYCBleGlzdCBpbiB0aGUgcXVlcnksIGFuZCB0aGUgYHN0YXRlYCBtYXRjaGVzLCByZW1vdmUgdGhlbSBmcm9tIHF1ZXJ5LCBhbmQgdHJ5IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcmV0dXJuIEEgc3RyaW5nIGZvciBhY2Nlc3MgdG9rZW4sIGBudWxsYCBmb3Igbm8gYXV0aG9yaXphdGlvbiBjb2RlXG4gICAqL1xuICBhc3luYyBoYW5kbGVBdXRoICgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBxdWVyeSA9IHBhcnNlUXVlcnkod2luZG93LmxvY2F0aW9uLnNlYXJjaClcbiAgICBpZiAocXVlcnkuY29kZSkge1xuICAgICAgaWYgKHF1ZXJ5LnN0YXRlICE9PSB0aGlzLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBjb25zdCBjb2RlID0gcXVlcnkuY29kZVxuICAgICAgZGVsZXRlIHF1ZXJ5LmNvZGVcbiAgICAgIGRlbGV0ZSBxdWVyeS5zdGF0ZVxuICAgICAgY29uc3QgcmVwbGFjZVVSTCA9IGJ1aWxkVVJMKGdldENsZWFuVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSwgcXVlcnkpICsgd2luZG93LmxvY2F0aW9uLmhhc2hcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgcmVwbGFjZVVSTClcbiAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbih7IGNvZGUgfSlcbiAgICAgIHJldHVybiBhY2Nlc3NUb2tlblxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGFjY2VzcyB0b2tlbiB2aWEgYGNvZGVgXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvZGUgLSBUaGUgY29kZSBmcm9tIHRoZSBxdWVyeVxuICAgKlxuICAgKiBAcmV0dXJuIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqL1xuICBhc3luYyBnZXRBY2Nlc3NUb2tlbiAoeyBjb2RlIH06IHsgY29kZTogc3RyaW5nIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4kaHR0cC5wb3N0KGBodHRwczovL2NvcnMtYW55d2hlcmUuaGVyb2t1YXBwLmNvbS8ke2NvbmNhdFVSTCh0aGlzLmJhc2VVUkwsICdvYXV0aC90b2tlbicpfWAsIHtcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuY2xpZW50U2VjcmV0LFxuICAgICAgY29kZSxcbiAgICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgcmVkaXJlY3RfdXJpOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICB9KVxuICAgIHJldHVybiBkYXRhLmFjY2Vzc190b2tlblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9naW5lZCB1c2VyIHdpdGggYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqXG4gICAqIEByZXR1cm4gVGhlIHVzZXJcbiAgICovXG4gIGFzeW5jIGdldFVzZXIgKHsgYWNjZXNzVG9rZW4gfSk6IFByb21pc2U8VnNzdWVBUEkuVXNlcj4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4kaHR0cC5nZXQoJ2FwaS92NC91c2VyJywge1xuICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIH0sXG4gICAgfSlcbiAgICByZXR1cm4gbm9ybWFsaXplVXNlcihkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpc3N1ZSBvZiB0aGlzIHBhZ2UgYWNjb3JkaW5nIHRvIHRoZSBpc3N1ZSBpZCBvciB0aGUgaXNzdWUgdGl0bGVcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXNzVG9rZW4gLSBVc2VyIGFjY2VzcyB0b2tlblxuICAgKiBAcGFyYW0gb3B0aW9ucy5pc3N1ZUlkIC0gVGhlIGlkIG9mIGlzc3VlXG4gICAqIEBwYXJhbSBvcHRpb25zLmlzc3VlVGl0bGUgLSBUaGUgdGl0bGUgb2YgaXNzdWVcbiAgICpcbiAgICogQHJldHVybiBUaGUgcmF3IHJlc3BvbnNlIG9mIGlzc3VlXG4gICAqL1xuXG4gIGFzeW5jIGdldElzc3VlICh7XG4gICAgYWNjZXNzVG9rZW4sXG4gICAgaXNzdWVJZCxcbiAgICBpc3N1ZVRpdGxlLFxuICB9KTogUHJvbWlzZTxWc3N1ZUFQSS5Jc3N1ZSB8IG51bGw+IHtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7fVxuXG4gICAgaWYgKGFjY2Vzc1Rva2VuKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAsXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzc3VlSWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4kaHR0cC5nZXQoYGFwaS92NC9wcm9qZWN0cy8ke3RoaXMuX2VuY29kZWRSZXBvfS9pc3N1ZXMvJHtpc3N1ZUlkfWAsIG9wdGlvbnMpXG4gICAgICAgIHJldHVybiBub3JtYWxpemVJc3N1ZShkYXRhKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZS5yZXNwb25zZSAmJiBlLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5wYXJhbXMgPSB7XG4gICAgICAgIGxhYmVsczogdGhpcy5sYWJlbHMsXG4gICAgICAgIG9yZGVyX2J5OiAnY3JlYXRlZF9hdCcsXG4gICAgICAgIHNvcnQ6ICdhc2MnLFxuICAgICAgICBzZWFyY2g6IGlzc3VlVGl0bGUsXG4gICAgICB9XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuJGh0dHAuZ2V0KGBhcGkvdjQvcHJvamVjdHMvJHt0aGlzLl9lbmNvZGVkUmVwb30vaXNzdWVzYCwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGlzc3VlID0gZGF0YS5tYXAobm9ybWFsaXplSXNzdWUpLmZpbmQoaXRlbSA9PiBpdGVtLnRpdGxlID09PSBpc3N1ZVRpdGxlKVxuICAgICAgcmV0dXJuIGlzc3VlIHx8IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbW1lbnRzIG9mIHRoaXMgcGFnZSBhY2NvcmRpbmcgdG8gdGhlIGlzc3VlIGlkIG9yIHRoZSBpc3N1ZSB0aXRsZVxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBvcHRpb25zLmlzc3VlSWQgLSBUaGUgaWQgb2YgaXNzdWVcbiAgICogQHBhcmFtIG9wdGlvbnMucXVlcnkgLSBUaGUgcXVlcnkgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBjb21tZW50c1xuICAgKi9cbiAgYXN5bmMgZ2V0Q29tbWVudHMgKHtcbiAgICBhY2Nlc3NUb2tlbixcbiAgICBpc3N1ZUlkLFxuICAgIHF1ZXJ5OiB7XG4gICAgICBwYWdlID0gMSxcbiAgICAgIHBlclBhZ2UgPSAxMCxcbiAgICAgIHNvcnQgPSAnZGVzYycsXG4gICAgfSA9IHt9LFxuICB9KTogUHJvbWlzZTxWc3N1ZUFQSS5Db21tZW50cz4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICAvLyBwYWdpbmF0aW9uXG4gICAgICAgICdwYWdlJzogcGFnZSxcbiAgICAgICAgJ3Blcl9wYWdlJzogcGVyUGFnZSxcbiAgICAgICAgJ29yZGVyX2J5JzogJ2NyZWF0ZWRfYXQnLFxuICAgICAgICAnc29ydCc6IHNvcnQsXG4gICAgICB9LFxuICAgIH1cbiAgICBpZiAoYWNjZXNzVG9rZW4pIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLiRodHRwLmdldChgYXBpL3Y0L3Byb2plY3RzLyR7dGhpcy5fZW5jb2RlZFJlcG99L2lzc3Vlcy8ke2lzc3VlSWR9L25vdGVzYCwgb3B0aW9ucylcbiAgICBjb25zdCBjb21tZW50c1JhdyA9IHJlc3BvbnNlLmRhdGFcblxuICAgIC8vIGdpdGxhYiBhcGkgdjQgc2hvdWxkIGdldCBwYXJzZWQgbWFya2Rvd24gY29udGVudCBhbmQgcmVhY3Rpb25zIGJ5IG90aGVyIGFwaVxuICAgIC8vIHRoaXMgaXMgcG90ZW50aWFsbHkgdG8gY2F1c2UgNDI5IFRvbyBNYW55IFJlcXVlc3RzXG4gICAgY29uc3QgZ2V0Q29tbWVudHNNZXRhOiBBcnJheTxQcm9taXNlPHZvaWQ+PiA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgY29tbWVudHNSYXcpIHtcbiAgICAgIGdldENvbW1lbnRzTWV0YS5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbW1lbnQuYm9keV9odG1sID0gYXdhaXQgdGhpcy5nZXRNYXJrZG93bkNvbnRlbnQoe1xuICAgICAgICAgIGFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgICAgICBjb250ZW50UmF3OiBjb21tZW50LmJvZHksXG4gICAgICAgIH0pXG4gICAgICB9KSgpKVxuICAgICAgZ2V0Q29tbWVudHNNZXRhLnB1c2goKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29tbWVudC5yZWFjdGlvbnMgPSBhd2FpdCB0aGlzLmdldENvbW1lbnRSZWFjdGlvbnMoe1xuICAgICAgICAgIGFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgICAgICBpc3N1ZUlkOiBpc3N1ZUlkLFxuICAgICAgICAgIGNvbW1lbnRJZDogY29tbWVudC5pZCxcbiAgICAgICAgfSlcbiAgICAgIH0pKCkpXG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZ2V0Q29tbWVudHNNZXRhKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvdW50OiBOdW1iZXIocmVzcG9uc2UuaGVhZGVyc1sneC10b3RhbCddKSxcbiAgICAgIHBhZ2U6IE51bWJlcihyZXNwb25zZS5oZWFkZXJzWyd4LXBhZ2UnXSksXG4gICAgICBwZXJQYWdlOiBOdW1iZXIocmVzcG9uc2UuaGVhZGVyc1sneC1wZXItcGFnZSddKSxcbiAgICAgIGRhdGE6IGNvbW1lbnRzUmF3Lm1hcChub3JtYWxpemVDb21tZW50KSxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwYXJzZSBIVE1MIG9mIG1hcmtkb3duIGNvbnRlbnRcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXNzVG9rZW4gLSBVc2VyIGFjY2VzcyB0b2tlblxuICAgKiBAcGFyYW0gb3B0aW9ucy5jb250ZW50UmF3IC0gVGhlIGlkIG9mIGlzc3VlXG4gICAqXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHN1Y2NlZWQsIGBmYWxzZWAgaWYgZmFpbGVkXG4gICAqL1xuICBhc3luYyBnZXRNYXJrZG93bkNvbnRlbnQgKHtcbiAgICBhY2Nlc3NUb2tlbixcbiAgICBjb250ZW50UmF3LFxuICB9OiB7XG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmcgfCBudWxsLFxuICAgIGNvbnRlbnRSYXc6IHN0cmluZyxcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge31cbiAgICBpZiAoYWNjZXNzVG9rZW4pIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiRodHRwLnBvc3QoYGFwaS92NC9tYXJrZG93bmAsIHtcbiAgICAgIHRleHQ6IGNvbnRlbnRSYXcsXG4gICAgICBnZm06IHRydWUsXG4gICAgfSwgb3B0aW9ucylcbiAgICByZXR1cm4gZGF0YS5odG1sXG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlYWN0aW9ucyBvZiBhIGNvb21lbnRcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXNzVG9rZW4gLSBVc2VyIGFjY2VzcyB0b2tlblxuICAgKiBAcGFyYW0gb3B0aW9ucy5pc3N1ZUlkIC0gVGhlIGlkIG9mIGlzc3VlXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbW1lbnRJZCAtIFRoZSBpZCBvZiBjb21tZW50XG4gICAqXG4gICAqIEByZXR1cm4gVGhlIGNvbW1lbnRzXG4gICAqL1xuICBhc3luYyBnZXRDb21tZW50UmVhY3Rpb25zICh7XG4gICAgYWNjZXNzVG9rZW4sXG4gICAgaXNzdWVJZCxcbiAgICBjb21tZW50SWQsXG4gIH0pOiBQcm9taXNlPFZzc3VlQVBJLlJlYWN0aW9ucz4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4kaHR0cC5nZXQoYGFwaS92NC9wcm9qZWN0cy8ke3RoaXMuX2VuY29kZWRSZXBvfS9pc3N1ZXMvJHtpc3N1ZUlkfS9ub3Rlcy8ke2NvbW1lbnRJZH0vYXdhcmRfZW1vamlgLCB7XG4gICAgICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAgfSxcbiAgICB9KVxuICAgIHJldHVybiBub3JtYWxpemVSZWFjdGlvbnMoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaXNzdWVcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXNzVG9rZW4gLSBVc2VyIGFjY2VzcyB0b2tlblxuICAgKiBAcGFyYW0gb3B0aW9ucy50aXRsZSAtIFRoZSB0aXRsZSBvZiBpc3N1ZVxuICAgKiBAcGFyYW0gb3B0aW9ucy5jb250ZW50IC0gVGhlIGNvbnRlbnQgb2YgaXNzdWVcbiAgICpcbiAgICogQHJldHVybiBUaGUgY3JlYXRlZCBpc3N1ZVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlSXNzdWUgKHtcbiAgICBhY2Nlc3NUb2tlbixcbiAgICB0aXRsZSxcbiAgICBjb250ZW50LFxuICB9KTogUHJvbWlzZTxWc3N1ZUFQSS5Jc3N1ZT4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4kaHR0cC5wb3N0KGBhcGkvdjQvcHJvamVjdHMvJHt0aGlzLl9lbmNvZGVkUmVwb30vaXNzdWVzYCwge1xuICAgICAgdGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogY29udGVudCxcbiAgICAgIGxhYmVsczogdGhpcy5sYWJlbHMsXG4gICAgfSwge1xuICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIH0sXG4gICAgfSlcbiAgICByZXR1cm4gbm9ybWFsaXplSXNzdWUoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgY29tbWVudFxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBvcHRpb25zLmlzc3VlSWQgLSBUaGUgaWQgb2YgaXNzdWVcbiAgICogQHBhcmFtIG9wdGlvbnMuY29udGVudCAtIFRoZSBjb250ZW50IG9mIGNvbW1lbnRcbiAgICpcbiAgICogQHJldHVybiBUaGUgY3JlYXRlZCBjb21tZW50XG4gICAqL1xuICBhc3luYyBjcmVhdGVDb21tZW50ICh7XG4gICAgYWNjZXNzVG9rZW4sXG4gICAgaXNzdWVJZCxcbiAgICBjb250ZW50LFxuICB9KTogUHJvbWlzZTxWc3N1ZUFQSS5Db21tZW50PiB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiRodHRwLnBvc3QoYGFwaS92NC9wcm9qZWN0cy8ke3RoaXMuX2VuY29kZWRSZXBvfS9pc3N1ZXMvJHtpc3N1ZUlkfS9ub3Rlc2AsIHtcbiAgICAgIGJvZHk6IGNvbnRlbnQsXG4gICAgfSwge1xuICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIH0sXG4gICAgfSlcbiAgICByZXR1cm4gbm9ybWFsaXplQ29tbWVudChkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyByZWFjdGlvbiBvZiBpc3N1ZVxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBvcHRpb25zLmlzc3VlSWQgLSBUaGUgaWQgb2YgaXNzdWVcbiAgICogQHBhcmFtIG9wdGlvbnMucmVhY3Rpb24gLSBUaGUgcmVhY3Rpb25cbiAgICpcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgc3VjY2VlZCwgYGZhbHNlYCBpZiBhbHJlYWR5IHRva2VuXG4gICAqL1xuICBhc3luYyBjcmVhdGVJc3N1ZVJlYWN0aW9uICh7XG4gICAgYWNjZXNzVG9rZW4sXG4gICAgaXNzdWVJZCxcbiAgICByZWFjdGlvbixcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuJGh0dHAucG9zdChgYXBpL3Y0L3Byb2plY3RzLyR7dGhpcy5fZW5jb2RlZFJlcG99L2lzc3Vlcy8ke2lzc3VlSWR9L2F3YXJkX2Vtb2ppYCwge1xuICAgICAgICBuYW1lOiBtYXBSZWFjdGlvbk5hbWUocmVhY3Rpb24pLFxuICAgICAgfSwge1xuICAgICAgICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAgfSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzID09PSAyMDFcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5yZXNwb25zZSAmJiBlLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcmVhY3Rpb24gb2YgY29tbWVudFxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBvcHRpb25zLmlzc3VlSWQgLSBUaGUgaWQgb2YgaXNzdWVcbiAgICogQHBhcmFtIG9wdGlvbnMuY29tbWVudElkIC0gVGhlIGlkIG9mIGNvbW1lbnRcbiAgICogQHBhcmFtIG9wdGlvbnMucmVhY3Rpb24gLSBUaGUgcmVhY3Rpb25cbiAgICpcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgc3VjY2VlZCwgYGZhbHNlYCBpZiBhbHJlYWR5IHRva2VuXG4gICAqL1xuICBhc3luYyBjcmVhdGVDb21tZW50UmVhY3Rpb24gKHtcbiAgICBpc3N1ZUlkLFxuICAgIGNvbW1lbnRJZCxcbiAgICByZWFjdGlvbixcbiAgICBhY2Nlc3NUb2tlbixcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuJGh0dHAucG9zdChgYXBpL3Y0L3Byb2plY3RzLyR7dGhpcy5fZW5jb2RlZFJlcG99L2lzc3Vlcy8ke2lzc3VlSWR9L25vdGVzLyR7Y29tbWVudElkfS9hd2FyZF9lbW9qaWAsIHtcbiAgICAgICAgbmFtZTogbWFwUmVhY3Rpb25OYW1lKHJlYWN0aW9uKSxcbiAgICAgIH0sIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAxXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaXQgY291bGQgYmUgYSBidWcgb2YgZ2l0bGFiXG4gICAgICAvLyBpZiBhIHJlYWN0aW9uIChhd2FyZCBlbW9qaSkgaGFzIGFscmVhZHkgZXhpc3RlZCwgaXQgcmV0dXJucyBhIDQwNCByZXNwb25zZSB3aXRoIGEgYnVnZ3kgbWVzc2FnZVxuICAgICAgLy8gaGF2ZSBzdWJtaXR0ZWQgYSBpc3N1ZTogaHR0cHM6Ly9naXRsYWIuY29tL2dpdGxhYi1vcmcvZ2l0bGFiLWNlL2lzc3Vlcy81NjE0N1xuICAgICAgaWYgKGUucmVzcG9uc2UgJiYgZS5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==

@@ -13,2 +13,3 @@ export function normalizeUser(user) {

content: issue.description,
link: issue.web_url,
};

@@ -48,2 +49,2 @@ }

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxVQUFVLGFBQWEsQ0FBRSxJQUFTO0lBQ3RDLE9BQU87UUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1FBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTztLQUN2QixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUUsS0FBVTtJQUN4QyxPQUFPO1FBQ0wsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHO1FBQ2IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1FBQ2xCLE9BQU8sRUFBRSxLQUFLLENBQUMsV0FBVztLQUMzQixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBRSxPQUFZO0lBQzVDLE9BQU87UUFDTCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDZCxPQUFPLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDMUIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ3hCLE1BQU0sRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNyQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFVBQVU7UUFDN0IsU0FBUyxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzdCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztLQUM3QixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBRSxTQUFjO0lBQ2hELE9BQU87UUFDTCxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUF4QixDQUF3QixDQUFDLENBQUMsTUFBTTtRQUMvRCxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUExQixDQUEwQixDQUFDLENBQUMsTUFBTTtRQUNuRSxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFyQixDQUFxQixDQUFDLENBQUMsTUFBTTtLQUM5RCxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUUsUUFBYTtJQUM1QyxJQUFJLFFBQVEsS0FBSyxNQUFNO1FBQUUsT0FBTyxVQUFVLENBQUE7SUFDMUMsSUFBSSxRQUFRLEtBQUssUUFBUTtRQUFFLE9BQU8sWUFBWSxDQUFBO0lBQzlDLE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUFFRCxlQUFlO0lBQ2IsYUFBYSxlQUFBO0lBQ2IsY0FBYyxnQkFBQTtJQUNkLGdCQUFnQixrQkFBQTtJQUNoQixrQkFBa0Isb0JBQUE7SUFDbEIsZUFBZSxpQkFBQTtDQUNoQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgVXNlcixcbiAgSXNzdWUsXG4gIENvbW1lbnQsXG4gIFJlYWN0aW9ucyxcbn0gZnJvbSAndnNzdWUnXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVVc2VyICh1c2VyOiBhbnkpOiBVc2VyIHtcbiAgcmV0dXJuIHtcbiAgICB1c2VybmFtZTogdXNlci51c2VybmFtZSxcbiAgICBhdmF0YXI6IHVzZXIuYXZhdGFyX3VybCxcbiAgICBob21lcGFnZTogdXNlci53ZWJfdXJsLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVJc3N1ZSAoaXNzdWU6IGFueSk6IElzc3VlIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogaXNzdWUuaWlkLFxuICAgIHRpdGxlOiBpc3N1ZS50aXRsZSxcbiAgICBjb250ZW50OiBpc3N1ZS5kZXNjcmlwdGlvbixcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudCAoY29tbWVudDogYW55KTogQ29tbWVudCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGNvbW1lbnQuaWQsXG4gICAgY29udGVudDogY29tbWVudC5ib2R5X2h0bWwsXG4gICAgY29udGVudFJhdzogY29tbWVudC5ib2R5LFxuICAgIGF1dGhvcjogbm9ybWFsaXplVXNlcihjb21tZW50LmF1dGhvciksXG4gICAgY3JlYXRlZEF0OiBjb21tZW50LmNyZWF0ZWRfYXQsXG4gICAgdXBkYXRlZEF0OiBjb21tZW50LnVwZGF0ZWRfYXQsXG4gICAgcmVhY3Rpb25zOiBjb21tZW50LnJlYWN0aW9ucyxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUmVhY3Rpb25zIChyZWFjdGlvbnM6IGFueSk6IFJlYWN0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgbGlrZTogcmVhY3Rpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0ubmFtZSA9PT0gJ3RodW1ic3VwJykubGVuZ3RoLFxuICAgIHVubGlrZTogcmVhY3Rpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0ubmFtZSA9PT0gJ3RodW1ic2Rvd24nKS5sZW5ndGgsXG4gICAgaGVhcnQ6IHJlYWN0aW9ucy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09ICdoZWFydCcpLmxlbmd0aCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwUmVhY3Rpb25OYW1lIChyZWFjdGlvbjogYW55KSB7XG4gIGlmIChyZWFjdGlvbiA9PT0gJ2xpa2UnKSByZXR1cm4gJ3RodW1ic3VwJ1xuICBpZiAocmVhY3Rpb24gPT09ICd1bmxpa2UnKSByZXR1cm4gJ3RodW1ic2Rvd24nXG4gIHJldHVybiByZWFjdGlvblxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5vcm1hbGl6ZVVzZXIsXG4gIG5vcm1hbGl6ZUlzc3VlLFxuICBub3JtYWxpemVDb21tZW50LFxuICBub3JtYWxpemVSZWFjdGlvbnMsXG4gIG1hcFJlYWN0aW9uTmFtZSxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLGFBQWEsQ0FBRSxJQUFTO0lBQ3RDLE9BQU87UUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1FBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTztLQUN2QixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUUsS0FBVTtJQUN4QyxPQUFPO1FBQ0wsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHO1FBQ2IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1FBQ2xCLE9BQU8sRUFBRSxLQUFLLENBQUMsV0FBVztRQUMxQixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU87S0FDcEIsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUUsT0FBWTtJQUM1QyxPQUFPO1FBQ0wsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ2QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzFCLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSTtRQUN4QixNQUFNLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDckMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzdCLFNBQVMsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM3QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7S0FDN0IsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUUsU0FBYztJQUNoRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBeEIsQ0FBd0IsQ0FBQyxDQUFDLE1BQU07UUFDL0QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBMUIsQ0FBMEIsQ0FBQyxDQUFDLE1BQU07UUFDbkUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBckIsQ0FBcUIsQ0FBQyxDQUFDLE1BQU07S0FDOUQsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFFLFFBQWtDO0lBQ2pFLElBQUksUUFBUSxLQUFLLE1BQU07UUFBRSxPQUFPLFVBQVUsQ0FBQTtJQUMxQyxJQUFJLFFBQVEsS0FBSyxRQUFRO1FBQUUsT0FBTyxZQUFZLENBQUE7SUFDOUMsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQztBQUVELGVBQWU7SUFDYixhQUFhLGVBQUE7SUFDYixjQUFjLGdCQUFBO0lBQ2QsZ0JBQWdCLGtCQUFBO0lBQ2hCLGtCQUFrQixvQkFBQTtJQUNsQixlQUFlLGlCQUFBO0NBQ2hCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWc3N1ZUFQSSB9IGZyb20gJ3Zzc3VlJ1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVXNlciAodXNlcjogYW55KTogVnNzdWVBUEkuVXNlciB7XG4gIHJldHVybiB7XG4gICAgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUsXG4gICAgYXZhdGFyOiB1c2VyLmF2YXRhcl91cmwsXG4gICAgaG9tZXBhZ2U6IHVzZXIud2ViX3VybCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSXNzdWUgKGlzc3VlOiBhbnkpOiBWc3N1ZUFQSS5Jc3N1ZSB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGlzc3VlLmlpZCxcbiAgICB0aXRsZTogaXNzdWUudGl0bGUsXG4gICAgY29udGVudDogaXNzdWUuZGVzY3JpcHRpb24sXG4gICAgbGluazogaXNzdWUud2ViX3VybCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudCAoY29tbWVudDogYW55KTogVnNzdWVBUEkuQ29tbWVudCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGNvbW1lbnQuaWQsXG4gICAgY29udGVudDogY29tbWVudC5ib2R5X2h0bWwsXG4gICAgY29udGVudFJhdzogY29tbWVudC5ib2R5LFxuICAgIGF1dGhvcjogbm9ybWFsaXplVXNlcihjb21tZW50LmF1dGhvciksXG4gICAgY3JlYXRlZEF0OiBjb21tZW50LmNyZWF0ZWRfYXQsXG4gICAgdXBkYXRlZEF0OiBjb21tZW50LnVwZGF0ZWRfYXQsXG4gICAgcmVhY3Rpb25zOiBjb21tZW50LnJlYWN0aW9ucyxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUmVhY3Rpb25zIChyZWFjdGlvbnM6IGFueSk6IFZzc3VlQVBJLlJlYWN0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgbGlrZTogcmVhY3Rpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0ubmFtZSA9PT0gJ3RodW1ic3VwJykubGVuZ3RoLFxuICAgIHVubGlrZTogcmVhY3Rpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0ubmFtZSA9PT0gJ3RodW1ic2Rvd24nKS5sZW5ndGgsXG4gICAgaGVhcnQ6IHJlYWN0aW9ucy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09ICdoZWFydCcpLmxlbmd0aCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwUmVhY3Rpb25OYW1lIChyZWFjdGlvbjoga2V5b2YgVnNzdWVBUEkuUmVhY3Rpb25zKTogc3RyaW5nIHtcbiAgaWYgKHJlYWN0aW9uID09PSAnbGlrZScpIHJldHVybiAndGh1bWJzdXAnXG4gIGlmIChyZWFjdGlvbiA9PT0gJ3VubGlrZScpIHJldHVybiAndGh1bWJzZG93bidcbiAgcmV0dXJuIHJlYWN0aW9uXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbm9ybWFsaXplVXNlcixcbiAgbm9ybWFsaXplSXNzdWUsXG4gIG5vcm1hbGl6ZUNvbW1lbnQsXG4gIG5vcm1hbGl6ZVJlYWN0aW9ucyxcbiAgbWFwUmVhY3Rpb25OYW1lLFxufVxuIl19
{
"name": "@vssue/api-gitlab-v4",
"version": "0.1.9",
"version": "0.2.0",
"description": "Vssue api for gitlab v4",

@@ -29,3 +29,3 @@ "license": "MIT",

"dependencies": {
"@vssue/utils": "^0.1.2",
"@vssue/utils": "^0.2.0",
"axios": "^0.18.0"

@@ -36,3 +36,3 @@ },

},
"gitHead": "58b1042ca58ffec75718d48fb0e4026082e39d11"
"gitHead": "b766459604ded3b56082a642a88e211433c7dbc2"
}

@@ -8,1 +8,6 @@ # @vssue/api-gitlab-v4

[__Github Repo__](https://github.com/meteorlxy/vssue)
## Features
- Comments sortable: `true`
- Comments reactions: `true`

@@ -1,2 +0,2 @@

import { Reactions, VssueAPI, VssueAPIOptions } from 'vssue';
import { VssueAPI, VssueAPIOptions } from 'vssue';
import { AxiosInstance } from 'axios';

@@ -9,3 +9,3 @@ /**

*/
export default class GitlabV4 implements VssueAPI {
export default class GitlabV4 implements VssueAPI.Instance {
baseURL: string;

@@ -20,43 +20,150 @@ owner: string;

private _encodedRepo;
readonly platform: {
name: string;
link: string;
version: string;
};
constructor({ baseURL, owner, repo, labels, clientId, clientSecret, state, }: VssueAPIOptions);
redirectAuthorize(): void;
handleAuthorize(): Promise<any>;
/**
* The platform api info
*/
readonly platform: VssueAPI.Platform;
/**
* Redirect to the authorization page of platform.
*/
redirectAuth(): void;
/**
* Handle authorization.
*
* @remarks
* If the `code` and `state` exist in the query, and the `state` matches, remove them from query, and try to get the access token.
*
* @return A string for access token, `null` for no authorization code
*/
handleAuth(): Promise<string | null>;
/**
* Get user access token via `code`
*
* @param options.code - The code from the query
*
* @return User access token
*/
getAccessToken({ code }: {
code: any;
}): Promise<any>;
code: string;
}): Promise<string>;
/**
* Get the logined user with access token.
*
* @param options.accessToken - User access token
*
* @return The user
*/
getUser({ accessToken }: {
accessToken: any;
}): Promise<import("vssue").User>;
getIssues({ accessToken }: {
}): Promise<VssueAPI.User>;
/**
* Get issue of this page according to the issue id or the issue title
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.issueTitle - The title of issue
*
* @return The raw response of issue
*/
getIssue({ accessToken, issueId, issueTitle, }: {
accessToken: any;
}): Promise<any>;
getComments({ issueId, accessToken, }: {
issueId: any;
issueTitle: any;
}): Promise<VssueAPI.Issue | null>;
/**
* Get comments of this page according to the issue id or the issue title
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.query - The query parameters
*
* @return The comments
*/
getComments({ accessToken, issueId, query: { page, perPage, sort, }, }: {
accessToken: any;
}): Promise<any>;
getCommentReactions({ issueId, commentId, accessToken, }: {
issueId: any;
query?: {
page?: number | undefined;
perPage?: number | undefined;
sort?: string | undefined;
} | undefined;
}): Promise<VssueAPI.Comments>;
/**
* Get the parse HTML of markdown content
*
* @param options.accessToken - User access token
* @param options.contentRaw - The id of issue
*
* @return `true` if succeed, `false` if failed
*/
getMarkdownContent({ accessToken, contentRaw, }: {
accessToken?: string | null;
contentRaw: string;
}): Promise<string>;
/**
* Get reactions of a cooment
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.commentId - The id of comment
*
* @return The comments
*/
getCommentReactions({ accessToken, issueId, commentId, }: {
accessToken: any;
issueId: any;
commentId: any;
}): Promise<VssueAPI.Reactions>;
/**
* Create a new issue
*
* @param options.accessToken - User access token
* @param options.title - The title of issue
* @param options.content - The content of issue
*
* @return The created issue
*/
createIssue({ accessToken, title, content, }: {
accessToken: any;
}): Promise<Reactions>;
createIssue({ title, content, accessToken, }: {
title: any;
content: any;
}): Promise<VssueAPI.Issue>;
/**
* Create a new comment
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.content - The content of comment
*
* @return The created comment
*/
createComment({ accessToken, issueId, content, }: {
accessToken: any;
}): Promise<import("vssue").Issue>;
createIssueComment({ issueId, content, accessToken, }: {
issueId: any;
content: any;
}): Promise<VssueAPI.Comment>;
/**
* Create a new reaction of issue
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.reaction - The reaction
*
* @return `true` if succeed, `false` if already token
*/
createIssueReaction({ accessToken, issueId, reaction, }: {
accessToken: any;
}): Promise<import("vssue").Comment>;
createIssueReaction({ issueId, reaction, accessToken, }: {
issueId: any;
reaction: any;
accessToken: any;
}): Promise<boolean>;
/**
* Create a new reaction of comment
*
* @param options.accessToken - User access token
* @param options.issueId - The id of issue
* @param options.commentId - The id of comment
* @param options.reaction - The reaction
*
* @return `true` if succeed, `false` if already token
*/
createCommentReaction({ issueId, commentId, reaction, accessToken, }: {

@@ -68,5 +175,2 @@ issueId: any;

}): Promise<boolean>;
getMarkdownContent({ contentRaw }: {
contentRaw: any;
}): Promise<string>;
}

@@ -1,7 +0,7 @@

import { User, Issue, Comment, Reactions } from 'vssue';
export declare function normalizeUser(user: any): User;
export declare function normalizeIssue(issue: any): Issue;
export declare function normalizeComment(comment: any): Comment;
export declare function normalizeReactions(reactions: any): Reactions;
export declare function mapReactionName(reaction: any): any;
import { VssueAPI } from 'vssue';
export declare function normalizeUser(user: any): VssueAPI.User;
export declare function normalizeIssue(issue: any): VssueAPI.Issue;
export declare function normalizeComment(comment: any): VssueAPI.Comment;
export declare function normalizeReactions(reactions: any): VssueAPI.Reactions;
export declare function mapReactionName(reaction: keyof VssueAPI.Reactions): string;
declare const _default: {

@@ -8,0 +8,0 @@ normalizeUser: typeof normalizeUser;

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc