@vssue/api-github-v3
Advanced tools
Comparing version 0.2.0 to 0.3.0
165
lib/index.js
import * as tslib_1 from "tslib"; | ||
import axios from 'axios'; | ||
import { buildURL, getCleanURL, parseQuery, } from '@vssue/utils'; | ||
import { normalizeUser, normalizeIssue, normalizeComment, mapReactionName, } from './utils'; | ||
import { normalizeUser, normalizeIssue, normalizeComment, normalizeReactions, mapReactionName, } from './utils'; | ||
/** | ||
* Github API v3 | ||
* Github REST API v3 | ||
* | ||
* @see https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/ | ||
* @see https://developer.github.com/v3/issues/ | ||
* @see https://developer.github.com/v3/issues/comments/ | ||
* @see https://developer.github.com/v3/reactions/ | ||
* @see https://developer.github.com/v3/ | ||
* @see https://developer.github.com/apps/building-oauth-apps/ | ||
*/ | ||
@@ -56,2 +54,4 @@ var GithubV3 = /** @class */ (function () { | ||
* Redirect to the authorization page of platform. | ||
* | ||
* @see https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#1-request-a-users-github-identity | ||
*/ | ||
@@ -69,6 +69,8 @@ GithubV3.prototype.redirectAuth = function () { | ||
* | ||
* @return A string for access token, `null` for no authorization code | ||
* | ||
* @see https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/ | ||
* | ||
* @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 | ||
*/ | ||
@@ -106,2 +108,4 @@ GithubV3.prototype.handleAuth = function () { | ||
* @return User access token | ||
* | ||
* @see https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#2-users-are-redirected-back-to-your-site-by-github | ||
*/ | ||
@@ -136,2 +140,4 @@ GithubV3.prototype.getAccessToken = function (_a) { | ||
* @return The user | ||
* | ||
* @see https://developer.github.com/v3/users/#get-the-authenticated-user | ||
*/ | ||
@@ -162,2 +168,6 @@ GithubV3.prototype.getUser = function (_a) { | ||
* @return The raw response of issue | ||
* | ||
* @see https://developer.github.com/v3/issues/#list-issues-for-a-repository | ||
* @see https://developer.github.com/v3/issues/#get-a-single-issue | ||
* @see https://developer.github.com/v3/#pagination | ||
*/ | ||
@@ -218,2 +228,33 @@ GithubV3.prototype.getIssue = function (_a) { | ||
/** | ||
* 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 | ||
* | ||
* @see https://developer.github.com/v3/issues/#create-an-issue | ||
*/ | ||
GithubV3.prototype.postIssue = function (_a) { | ||
var accessToken = _a.accessToken, title = _a.title, content = _a.content; | ||
return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
var data; | ||
return tslib_1.__generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: return [4 /*yield*/, this.$http.post("repos/" + this.owner + "/" + this.repo + "/issues", { | ||
title: title, | ||
body: content, | ||
labels: this.labels.split(','), | ||
}, { | ||
headers: { 'Authorization': "token " + accessToken }, | ||
})]; | ||
case 1: | ||
data = (_b.sent()).data; | ||
return [2 /*return*/, normalizeIssue(data)]; | ||
} | ||
}); | ||
}); | ||
}; | ||
/** | ||
* Get comments of this page according to the issue id or the issue title | ||
@@ -226,2 +267,9 @@ * | ||
* @return The comments | ||
* | ||
* @see https://developer.github.com/v3/issues/comments/#list-comments-on-an-issue | ||
* @see https://developer.github.com/v3/#pagination | ||
* | ||
* @reamrks | ||
* Github V3 does not support sort for issue comments now. | ||
* Github V3 have to request the parent issue to get the count of comments. | ||
*/ | ||
@@ -291,31 +339,2 @@ GithubV3.prototype.getComments = function (_a) { | ||
/** | ||
* 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 | ||
*/ | ||
GithubV3.prototype.createIssue = function (_a) { | ||
var accessToken = _a.accessToken, title = _a.title, content = _a.content; | ||
return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
var data; | ||
return tslib_1.__generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: return [4 /*yield*/, this.$http.post("repos/" + this.owner + "/" + this.repo + "/issues", { | ||
title: title, | ||
body: content, | ||
labels: this.labels.split(','), | ||
}, { | ||
headers: { 'Authorization': "token " + accessToken }, | ||
})]; | ||
case 1: | ||
data = (_b.sent()).data; | ||
return [2 /*return*/, normalizeIssue(data)]; | ||
} | ||
}); | ||
}); | ||
}; | ||
/** | ||
* Create a new comment | ||
@@ -328,4 +347,6 @@ * | ||
* @return The created comment | ||
* | ||
* @see https://developer.github.com/v3/issues/comments/#create-a-comment | ||
*/ | ||
GithubV3.prototype.createComment = function (_a) { | ||
GithubV3.prototype.postComment = function (_a) { | ||
var accessToken = _a.accessToken, issueId = _a.issueId, content = _a.content; | ||
@@ -356,24 +377,23 @@ return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
/** | ||
* Create a new reaction of issue | ||
* Delete a comment | ||
* | ||
* @param options.accessToken - User access token | ||
* @param options.issueId - The id of issue | ||
* @param options.reaction - The reaction | ||
* @param options.commentId - The id of comment | ||
* | ||
* @return `true` if succeed, `false` if already token | ||
* @return `true` if succeed, `false` if failed | ||
* | ||
* @see https://developer.github.com/v3/issues/comments/#delete-a-comment | ||
*/ | ||
GithubV3.prototype.createIssueReaction = function (_a) { | ||
var accessToken = _a.accessToken, issueId = _a.issueId, reaction = _a.reaction; | ||
GithubV3.prototype.deleteComment = function (_a) { | ||
var accessToken = _a.accessToken, commentId = _a.commentId; | ||
return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
var response; | ||
var status; | ||
return tslib_1.__generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: return [4 /*yield*/, this.$http.post("repos/" + this.owner + "/" + this.repo + "/issues/" + issueId + "/reactions", { | ||
content: mapReactionName(reaction), | ||
}, { | ||
case 0: return [4 /*yield*/, this.$http.delete("repos/" + this.owner + "/" + this.repo + "/issues/comments/" + commentId, { | ||
headers: { 'Authorization': "token " + accessToken }, | ||
})]; | ||
case 1: | ||
response = _b.sent(); | ||
return [2 /*return*/, response.status === 201]; | ||
status = (_b.sent()).status; | ||
return [2 /*return*/, status === 204]; | ||
} | ||
@@ -384,13 +404,48 @@ }); | ||
/** | ||
* Create a new reaction of comment | ||
* Get reactions of a comment | ||
* | ||
* @param options.accessToken - User access token | ||
* @param options.issueId - The id of issue | ||
* @param options.commentId - The id of comment | ||
* | ||
* @return The comments | ||
* | ||
* @see https://developer.github.com/v3/issues/comments/#get-a-single-comment | ||
* @see https://developer.github.com/v3/reactions/#list-reactions-for-an-issue-comment | ||
* | ||
* @remarks | ||
* The `List reactions for an issue comment` API also returns author of each reaction. | ||
* As we only need the count, use the `Get a single comment` API is much simpler. | ||
*/ | ||
GithubV3.prototype.getCommentReactions = function (_a) { | ||
var accessToken = _a.accessToken, commentId = _a.commentId; | ||
return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
var data; | ||
return tslib_1.__generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: return [4 /*yield*/, this.$http.get("repos/" + this.owner + "/" + this.repo + "/issues/comments/" + commentId, { | ||
headers: { | ||
'Authorization': "token " + accessToken, | ||
'Accept': 'application/vnd.github.squirrel-girl-preview', | ||
}, | ||
})]; | ||
case 1: | ||
data = (_b.sent()).data; | ||
return [2 /*return*/, normalizeReactions(data.reactions)]; | ||
} | ||
}); | ||
}); | ||
}; | ||
/** | ||
* Create a new reaction of a comment | ||
* | ||
* @param options.accessToken - User access token | ||
* @param options.commentId - The id of comment | ||
* @param options.reaction - The reaction | ||
* | ||
* @return `true` if succeed, `false` if already token | ||
* | ||
* @see https://developer.github.com/v3/reactions/#create-reaction-for-an-issue-comment | ||
*/ | ||
GithubV3.prototype.createCommentReaction = function (_a) { | ||
var accessToken = _a.accessToken, issueId = _a.issueId, commentId = _a.commentId, reaction = _a.reaction; | ||
GithubV3.prototype.postCommentReaction = function (_a) { | ||
var accessToken = _a.accessToken, commentId = _a.commentId, reaction = _a.reaction; | ||
return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
@@ -418,2 +473,2 @@ var response; | ||
export default GithubV3; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUtBLE9BQU8sS0FHTixNQUFNLE9BQU8sQ0FBQTtBQUVkLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFVBQVUsR0FDWCxNQUFNLGNBQWMsQ0FBQTtBQUVyQixPQUFPLEVBQ0wsYUFBYSxFQUNiLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsZUFBZSxHQUNoQixNQUFNLFNBQVMsQ0FBQTtBQUVoQjs7Ozs7OztHQU9HO0FBQ0g7SUFVRSxrQkFBYSxFQVFLO1lBUGhCLGVBQWtDLEVBQWxDLHVEQUFrQyxFQUNsQyxnQkFBSyxFQUNMLGNBQUksRUFDSixrQkFBTSxFQUNOLHNCQUFRLEVBQ1IsOEJBQVksRUFDWixnQkFBSztRQUVMLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUU5QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUVsQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDeEIsT0FBTyxTQUFBO1lBQ1AsT0FBTyxFQUFFO2dCQUNQLFFBQVEsRUFBRSxnQ0FBZ0M7YUFDM0M7U0FDRixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsUUFBUTtZQUNyRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUN2QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO2FBQ3ZEO1lBQ0QsT0FBTyxRQUFRLENBQUE7UUFDakIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBS0Qsc0JBQUksOEJBQVE7UUFIWjs7V0FFRzthQUNIO1lBQ0UsT0FBTztnQkFDTCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixPQUFPLEVBQUUsSUFBSTtnQkFDYixJQUFJLEVBQUU7b0JBQ0osU0FBUyxFQUFFLElBQUk7b0JBQ2YsUUFBUSxFQUFFLEtBQUs7aUJBQ2hCO2FBQ0YsQ0FBQTtRQUNILENBQUM7OztPQUFBO0lBRUQ7O09BRUc7SUFDSCwrQkFBWSxHQUFaO1FBQ0UsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLDBDQUEwQyxFQUFFO1lBQzFFLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN4QixZQUFZLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ2xDLEtBQUssRUFBRSxhQUFhO1lBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNsQixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNHLDZCQUFVLEdBQWhCOzs7Ozs7d0JBQ1EsS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBOzZCQUM1QyxLQUFLLENBQUMsSUFBSSxFQUFWLHdCQUFVO3dCQUNaLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFOzRCQUM5QixzQkFBTyxJQUFJLEVBQUE7eUJBQ1o7d0JBQ0ssSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUE7d0JBQ3ZCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQTt3QkFDakIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFBO3dCQUNaLFVBQVUsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUE7d0JBQzVGLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUE7d0JBQzdCLHFCQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxJQUFJLE1BQUEsRUFBRSxDQUFDLEVBQUE7O3dCQUFqRCxXQUFXLEdBQUcsU0FBbUM7d0JBQ3ZELHNCQUFPLFdBQVcsRUFBQTs0QkFFcEIsc0JBQU8sSUFBSSxFQUFBOzs7O0tBQ1o7SUFFRDs7Ozs7O09BTUc7SUFDRyxpQ0FBYyxHQUFwQixVQUFzQixFQUEwQjtZQUF4QixjQUFJOzs7Ozs0QkFLVCxxQkFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx5Q0FBdUMsNkNBQStDLEVBQUU7NEJBQzdILFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUTs0QkFDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZOzRCQUNoQyxJQUFJLE1BQUE7eUJBT0wsRUFBRTs0QkFDRCxPQUFPLEVBQUU7Z0NBQ1AsUUFBUSxFQUFFLGtCQUFrQjs2QkFDN0I7eUJBQ0YsQ0FBQyxFQUFBOzt3QkFkTSxJQUFJLEdBQUssQ0FBQSxTQWNmLENBQUEsS0FkVTt3QkFlWixzQkFBTyxJQUFJLENBQUMsWUFBWSxFQUFBOzs7O0tBQ3pCO0lBRUQ7Ozs7OztPQU1HO0lBQ0csMEJBQU8sR0FBYixVQUFlLEVBQWU7WUFBYiw0QkFBVzs7Ozs7NEJBQ1QscUJBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFOzRCQUM3QyxPQUFPLEVBQUUsRUFBRSxlQUFlLEVBQUUsV0FBUyxXQUFhLEVBQUU7eUJBQ3JELENBQUMsRUFBQTs7d0JBRk0sSUFBSSxHQUFLLENBQUEsU0FFZixDQUFBLEtBRlU7d0JBR1osc0JBQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFBOzs7O0tBQzNCO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDRywyQkFBUSxHQUFkLFVBQWdCLEVBSWY7WUFIQyw0QkFBVyxFQUNYLG9CQUFPLEVBQ1AsMEJBQVU7Ozs7Ozt3QkFFSixPQUFPLEdBQXVCLEVBQUUsQ0FBQTt3QkFFdEMsSUFBSSxXQUFXLEVBQUU7NEJBQ2YsT0FBTyxDQUFDLE9BQU8sR0FBRztnQ0FDaEIsZUFBZSxFQUFFLFdBQVMsV0FBYTs2QkFDeEMsQ0FBQTt5QkFDRjs2QkFFRyxPQUFPLEVBQVAsd0JBQU87Ozs7d0JBRVAsT0FBTyxDQUFDLE1BQU0sR0FBRzs0QkFDZixtQkFBbUI7NEJBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO3lCQUN0QixDQUFBO3dCQUNnQixxQkFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFTLElBQUksQ0FBQyxLQUFLLFNBQUksSUFBSSxDQUFDLElBQUksZ0JBQVcsT0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFBOzt3QkFBNUYsSUFBSSxHQUFLLENBQUEsU0FBbUYsQ0FBQSxLQUF4Rjt3QkFDWixzQkFBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUE7Ozt3QkFFM0IsSUFBSSxHQUFDLENBQUMsUUFBUSxJQUFJLEdBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDM0Msc0JBQU8sSUFBSSxFQUFBO3lCQUNaOzZCQUFNOzRCQUNMLE1BQU0sR0FBQyxDQUFBO3lCQUNSOzs7O3dCQUdILE9BQU8sQ0FBQyxNQUFNLEdBQUc7NEJBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNOzRCQUNuQixJQUFJLEVBQUUsU0FBUzs0QkFDZixTQUFTLEVBQUUsS0FBSzs0QkFDaEIsbUJBQW1COzRCQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTt5QkFDdEIsQ0FBQTt3QkFDZ0IscUJBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBUyxJQUFJLENBQUMsS0FBSyxTQUFJLElBQUksQ0FBQyxJQUFJLFlBQVMsRUFBRSxPQUFPLENBQUMsRUFBQTs7d0JBQWpGLElBQUksR0FBSyxDQUFBLFNBQXdFLENBQUEsS0FBN0U7d0JBQ04sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQXpCLENBQXlCLENBQUMsQ0FBQTt3QkFDOUUsc0JBQU8sS0FBSyxJQUFJLElBQUksRUFBQTs7Ozs7S0FFdkI7SUFFRDs7Ozs7Ozs7T0FRRztJQUNHLDhCQUFXLEdBQWpCLFVBQW1CLEVBUWxCO1lBUEMsNEJBQVcsRUFDWCxvQkFBTyxFQUNQLGFBSU0sRUFKTiw0QkFJTSxFQUhKLFlBQVEsRUFBUiw2QkFBUSxFQUNSLGVBQVksRUFBWixpQ0FBWSxFQUNaLFlBQWEsRUFBYixrQ0FBYTs7Ozs7O3dCQUdULFlBQVksR0FBdUI7NEJBQ3ZDLE1BQU0sRUFBRTtnQ0FDTixtQkFBbUI7Z0NBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFOzZCQUN0Qjt5QkFDRixDQUFBO3dCQUNLLGVBQWUsR0FBdUI7NEJBQzFDLE1BQU0sRUFBRTtnQ0FDTixhQUFhO2dDQUNiLE1BQU0sRUFBRSxJQUFJO2dDQUNaLFVBQVUsRUFBRSxPQUFPO2dDQUNuQjs7O21DQUdHO2dDQUNILHFCQUFxQjtnQ0FDckIscUJBQXFCO2dDQUNyQixtQkFBbUI7Z0NBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFOzZCQUN4Qjs0QkFDRCxPQUFPLEVBQUU7Z0NBQ1AsUUFBUSxFQUFFO29DQUNSLG9DQUFvQztvQ0FDcEMscUNBQXFDO29DQUNyQyw4Q0FBOEM7aUNBQy9DOzZCQUNGO3lCQUNGLENBQUE7d0JBQ0QsSUFBSSxXQUFXLEVBQUU7NEJBQ2YsWUFBWSxDQUFDLE9BQU8sR0FBRztnQ0FDckIsZUFBZSxFQUFFLFdBQVMsV0FBYTs2QkFDeEMsQ0FBQTs0QkFDRCxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFdBQVMsV0FBYSxDQUFBO3lCQUNsRTt3QkFHK0IscUJBQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQ0FDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBUyxJQUFJLENBQUMsS0FBSyxTQUFJLElBQUksQ0FBQyxJQUFJLGdCQUFXLE9BQVMsRUFBRSxZQUFZLENBQUM7Z0NBQ2xGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVMsSUFBSSxDQUFDLEtBQUssU0FBSSxJQUFJLENBQUMsSUFBSSxnQkFBVyxPQUFPLGNBQVcsRUFBRSxlQUFlLENBQUM7NkJBQy9GLENBQUM7NEJBRUYsOEVBQThFOzBCQUY1RTs7d0JBSEksS0FBQSw4QkFBMEIsU0FHOUI7NEJBRUYsOEVBQThFO2lDQUY1RSxFQUhLLFFBQVEsUUFBQSxFQUFFLFdBQVcsUUFBQTt3QkFNdEIsVUFBVSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFBO3dCQUV0RCxzQkFBTztnQ0FDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dDQUNyQyxJQUFJLEVBQUUsSUFBSTtnQ0FDVixPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO2dDQUN4RixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7NkJBQzdDLEVBQUE7Ozs7S0FDRjtJQUVEOzs7Ozs7OztPQVFHO0lBQ0csOEJBQVcsR0FBakIsVUFBbUIsRUFJbEI7WUFIQyw0QkFBVyxFQUNYLGdCQUFLLEVBQ0wsb0JBQU87Ozs7OzRCQUVVLHFCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVMsSUFBSSxDQUFDLEtBQUssU0FBSSxJQUFJLENBQUMsSUFBSSxZQUFTLEVBQUU7NEJBQ2hGLEtBQUssT0FBQTs0QkFDTCxJQUFJLEVBQUUsT0FBTzs0QkFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO3lCQUMvQixFQUFFOzRCQUNELE9BQU8sRUFBRSxFQUFFLGVBQWUsRUFBRSxXQUFTLFdBQWEsRUFBRTt5QkFDckQsQ0FBQyxFQUFBOzt3QkFOTSxJQUFJLEdBQUssQ0FBQSxTQU1mLENBQUEsS0FOVTt3QkFPWixzQkFBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUE7Ozs7S0FDNUI7SUFFRDs7Ozs7Ozs7T0FRRztJQUNHLGdDQUFhLEdBQW5CLFVBQXFCLEVBSXBCO1lBSEMsNEJBQVcsRUFDWCxvQkFBTyxFQUNQLG9CQUFPOzs7Ozs0QkFFVSxxQkFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFTLElBQUksQ0FBQyxLQUFLLFNBQUksSUFBSSxDQUFDLElBQUksZ0JBQVcsT0FBTyxjQUFXLEVBQUU7NEJBQ3BHLElBQUksRUFBRSxPQUFPO3lCQUNkLEVBQUU7NEJBQ0QsT0FBTyxFQUFFO2dDQUNQLGVBQWUsRUFBRSxXQUFTLFdBQWE7Z0NBQ3ZDLFFBQVEsRUFBRTtvQ0FDUixvQ0FBb0M7b0NBQ3BDLHFDQUFxQztvQ0FDckMsOENBQThDO2lDQUMvQzs2QkFDRjt5QkFDRixDQUFDLEVBQUE7O3dCQVhNLElBQUksR0FBSyxDQUFBLFNBV2YsQ0FBQSxLQVhVO3dCQVlaLHNCQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFBOzs7O0tBQzlCO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDRyxzQ0FBbUIsR0FBekIsVUFBMkIsRUFJMUI7WUFIQyw0QkFBVyxFQUNYLG9CQUFPLEVBQ1Asc0JBQVE7Ozs7OzRCQUVTLHFCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVMsSUFBSSxDQUFDLEtBQUssU0FBSSxJQUFJLENBQUMsSUFBSSxnQkFBVyxPQUFPLGVBQVksRUFBRTs0QkFDckcsT0FBTyxFQUFFLGVBQWUsQ0FBQyxRQUFRLENBQUM7eUJBQ25DLEVBQUU7NEJBQ0QsT0FBTyxFQUFFLEVBQUUsZUFBZSxFQUFFLFdBQVMsV0FBYSxFQUFFO3lCQUNyRCxDQUFDLEVBQUE7O3dCQUpJLFFBQVEsR0FBRyxTQUlmO3dCQUNGLHNCQUFPLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFBOzs7O0tBQy9CO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0csd0NBQXFCLEdBQTNCLFVBQTZCLEVBSzVCO1lBSkMsNEJBQVcsRUFDWCxvQkFBTyxFQUNQLHdCQUFTLEVBQ1Qsc0JBQVE7Ozs7OzRCQUVTLHFCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVMsSUFBSSxDQUFDLEtBQUssU0FBSSxJQUFJLENBQUMsSUFBSSx5QkFBb0IsU0FBUyxlQUFZLEVBQUU7NEJBQ2hILE9BQU8sRUFBRSxlQUFlLENBQUMsUUFBUSxDQUFDO3lCQUNuQyxFQUFFOzRCQUNELE9BQU8sRUFBRTtnQ0FDUCxlQUFlLEVBQUUsV0FBUyxXQUFhO2dDQUN2QyxRQUFRLEVBQUUsOENBQThDOzZCQUN6RDt5QkFDRixDQUFDLEVBQUE7O3dCQVBJLFFBQVEsR0FBRyxTQU9mO3dCQUNGLHNCQUFPLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFBOzs7O0tBQy9CO0lBQ0gsZUFBQztBQUFELENBQUMsQUF6V0QsSUF5V0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBWc3N1ZUFQSSxcbiAgVnNzdWVBUElPcHRpb25zLFxufSBmcm9tICd2c3N1ZSdcblxuaW1wb3J0IGF4aW9zLCB7XG4gIEF4aW9zSW5zdGFuY2UsXG4gIEF4aW9zUmVxdWVzdENvbmZpZyxcbn0gZnJvbSAnYXhpb3MnXG5cbmltcG9ydCB7XG4gIGJ1aWxkVVJMLFxuICBnZXRDbGVhblVSTCxcbiAgcGFyc2VRdWVyeSxcbn0gZnJvbSAnQHZzc3VlL3V0aWxzJ1xuXG5pbXBvcnQge1xuICBub3JtYWxpemVVc2VyLFxuICBub3JtYWxpemVJc3N1ZSxcbiAgbm9ybWFsaXplQ29tbWVudCxcbiAgbWFwUmVhY3Rpb25OYW1lLFxufSBmcm9tICcuL3V0aWxzJ1xuXG4vKipcbiAqIEdpdGh1YiBBUEkgdjNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vYXBwcy9idWlsZGluZy1vYXV0aC1hcHBzL2F1dGhvcml6aW5nLW9hdXRoLWFwcHMvXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvaXNzdWVzL1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL2lzc3Vlcy9jb21tZW50cy9cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9yZWFjdGlvbnMvXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdpdGh1YlYzIGltcGxlbWVudHMgVnNzdWVBUEkuSW5zdGFuY2Uge1xuICBiYXNlVVJMOiBzdHJpbmdcbiAgb3duZXI6IHN0cmluZ1xuICByZXBvOiBzdHJpbmdcbiAgbGFiZWxzOiBzdHJpbmdcbiAgY2xpZW50SWQ6IHN0cmluZ1xuICBjbGllbnRTZWNyZXQ6IHN0cmluZ1xuICBzdGF0ZTogc3RyaW5nXG4gICRodHRwOiBBeGlvc0luc3RhbmNlXG5cbiAgY29uc3RydWN0b3IgKHtcbiAgICBiYXNlVVJMID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nLFxuICAgIG93bmVyLFxuICAgIHJlcG8sXG4gICAgbGFiZWxzLFxuICAgIGNsaWVudElkLFxuICAgIGNsaWVudFNlY3JldCxcbiAgICBzdGF0ZSxcbiAgfTogVnNzdWVBUElPcHRpb25zKSB7XG4gICAgdGhpcy5iYXNlVVJMID0gYmFzZVVSTFxuICAgIHRoaXMub3duZXIgPSBvd25lclxuICAgIHRoaXMucmVwbyA9IHJlcG9cbiAgICB0aGlzLmxhYmVscyA9IGxhYmVscy5qb2luKCcsJylcblxuICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZFxuICAgIHRoaXMuY2xpZW50U2VjcmV0ID0gY2xpZW50U2VjcmV0XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlXG5cbiAgICB0aGlzLiRodHRwID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uJyxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHRoaXMuJGh0dHAuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZS5kYXRhLmVycm9yX2Rlc2NyaXB0aW9uKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGxhdGZvcm0gYXBpIGluZm9cbiAgICovXG4gIGdldCBwbGF0Zm9ybSAoKTogVnNzdWVBUEkuUGxhdGZvcm0ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnR2l0SHViJyxcbiAgICAgIGxpbms6ICdodHRwczovL2dpdGh1Yi5jb20nLFxuICAgICAgdmVyc2lvbjogJ3YzJyxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgcmVhY3RhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRpcmVjdCB0byB0aGUgYXV0aG9yaXphdGlvbiBwYWdlIG9mIHBsYXRmb3JtLlxuICAgKi9cbiAgcmVkaXJlY3RBdXRoICgpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGJ1aWxkVVJMKCdodHRwczovL2dpdGh1Yi5jb20vbG9naW4vb2F1dGgvYXV0aG9yaXplJywge1xuICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgcmVkaXJlY3RfdXJpOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIHNjb3BlOiAncHVibGljX3JlcG8nLFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYXV0aG9yaXphdGlvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgdGhlIGBjb2RlYCBhbmQgYHN0YXRlYCBleGlzdCBpbiB0aGUgcXVlcnksIGFuZCB0aGUgYHN0YXRlYCBtYXRjaGVzLCByZW1vdmUgdGhlbSBmcm9tIHF1ZXJ5LCBhbmQgdHJ5IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcmV0dXJuIEEgc3RyaW5nIGZvciBhY2Nlc3MgdG9rZW4sIGBudWxsYCBmb3Igbm8gYXV0aG9yaXphdGlvbiBjb2RlXG4gICAqL1xuICBhc3luYyBoYW5kbGVBdXRoICgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBxdWVyeSA9IHBhcnNlUXVlcnkod2luZG93LmxvY2F0aW9uLnNlYXJjaClcbiAgICBpZiAocXVlcnkuY29kZSkge1xuICAgICAgaWYgKHF1ZXJ5LnN0YXRlICE9PSB0aGlzLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBjb25zdCBjb2RlID0gcXVlcnkuY29kZVxuICAgICAgZGVsZXRlIHF1ZXJ5LmNvZGVcbiAgICAgIGRlbGV0ZSBxdWVyeS5zdGF0ZVxuICAgICAgY29uc3QgcmVwbGFjZVVSTCA9IGJ1aWxkVVJMKGdldENsZWFuVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSwgcXVlcnkpICsgd2luZG93LmxvY2F0aW9uLmhhc2hcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgcmVwbGFjZVVSTClcbiAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbih7IGNvZGUgfSlcbiAgICAgIHJldHVybiBhY2Nlc3NUb2tlblxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGFjY2VzcyB0b2tlbiB2aWEgYGNvZGVgXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvZGUgLSBUaGUgY29kZSBmcm9tIHRoZSBxdWVyeVxuICAgKlxuICAgKiBAcmV0dXJuIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqL1xuICBhc3luYyBnZXRBY2Nlc3NUb2tlbiAoeyBjb2RlIH06IHsgY29kZTogc3RyaW5nIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIC8qKlxuICAgICAqIGFjY2Vzc190b2tlbiBhcGkgZG9lcyBub3Qgc3VwcG9ydCBjb3JzXG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL2dpdGh1Yi9pc3N1ZXMvMzMwXG4gICAgICovXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiRodHRwLnBvc3QoYGh0dHBzOi8vY29ycy1hbnl3aGVyZS5oZXJva3VhcHAuY29tLyR7J2h0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aC9hY2Nlc3NfdG9rZW4nfWAsIHtcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuY2xpZW50U2VjcmV0LFxuICAgICAgY29kZSxcbiAgICAgIC8qKlxuICAgICAgICogdXNlbGVzcyBidXQgbWVudGlvbmVkIGluIGRvY3NcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS9hcHBzL2J1aWxkaW5nLW9hdXRoLWFwcHMvYXV0aG9yaXppbmctb2F1dGgtYXBwcy8jMi11c2Vycy1hcmUtcmVkaXJlY3RlZC1iYWNrLXRvLXlvdXItc2l0ZS1ieS1naXRodWJcbiAgICAgICAqL1xuICAgICAgLy8gcmVkaXJlY3RfdXJpOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIC8vIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgIH0sIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgfSlcbiAgICByZXR1cm4gZGF0YS5hY2Nlc3NfdG9rZW5cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvZ2luZWQgdXNlciB3aXRoIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXNzVG9rZW4gLSBVc2VyIGFjY2VzcyB0b2tlblxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSB1c2VyXG4gICAqL1xuICBhc3luYyBnZXRVc2VyICh7IGFjY2Vzc1Rva2VuIH0pOiBQcm9taXNlPFZzc3VlQVBJLlVzZXI+IHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuJGh0dHAuZ2V0KCcvdXNlcicsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0F1dGhvcml6YXRpb24nOiBgdG9rZW4gJHthY2Nlc3NUb2tlbn1gIH0sXG4gICAgfSlcbiAgICByZXR1cm4gbm9ybWFsaXplVXNlcihkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpc3N1ZSBvZiB0aGlzIHBhZ2UgYWNjb3JkaW5nIHRvIHRoZSBpc3N1ZSBpZCBvciB0aGUgaXNzdWUgdGl0bGVcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXNzVG9rZW4gLSBVc2VyIGFjY2VzcyB0b2tlblxuICAgKiBAcGFyYW0gb3B0aW9ucy5pc3N1ZUlkIC0gVGhlIGlkIG9mIGlzc3VlXG4gICAqIEBwYXJhbSBvcHRpb25zLmlzc3VlVGl0bGUgLSBUaGUgdGl0bGUgb2YgaXNzdWVcbiAgICpcbiAgICogQHJldHVybiBUaGUgcmF3IHJlc3BvbnNlIG9mIGlzc3VlXG4gICAqL1xuICBhc3luYyBnZXRJc3N1ZSAoe1xuICAgIGFjY2Vzc1Rva2VuLFxuICAgIGlzc3VlSWQsXG4gICAgaXNzdWVUaXRsZSxcbiAgfSk6IFByb21pc2U8VnNzdWVBUEkuSXNzdWUgfCBudWxsPiB7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge31cblxuICAgIGlmIChhY2Nlc3NUb2tlbikge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGB0b2tlbiAke2FjY2Vzc1Rva2VufWAsXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzc3VlSWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9wdGlvbnMucGFyYW1zID0ge1xuICAgICAgICAgIC8vIHRvIGF2b2lkIGNhY2hpbmdcbiAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiRodHRwLmdldChgcmVwb3MvJHt0aGlzLm93bmVyfS8ke3RoaXMucmVwb30vaXNzdWVzLyR7aXNzdWVJZH1gLCBvcHRpb25zKVxuICAgICAgICByZXR1cm4gbm9ybWFsaXplSXNzdWUoZGF0YSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUucmVzcG9uc2UgJiYgZS5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucGFyYW1zID0ge1xuICAgICAgICBsYWJlbHM6IHRoaXMubGFiZWxzLFxuICAgICAgICBzb3J0OiAnY3JlYXRlZCcsXG4gICAgICAgIGRpcmVjdGlvbjogJ2FzYycsXG4gICAgICAgIC8vIHRvIGF2b2lkIGNhY2hpbmdcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgfVxuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiRodHRwLmdldChgcmVwb3MvJHt0aGlzLm93bmVyfS8ke3RoaXMucmVwb30vaXNzdWVzYCwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGlzc3VlID0gZGF0YS5tYXAobm9ybWFsaXplSXNzdWUpLmZpbmQoaXRlbSA9PiBpdGVtLnRpdGxlID09PSBpc3N1ZVRpdGxlKVxuICAgICAgcmV0dXJuIGlzc3VlIHx8IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbW1lbnRzIG9mIHRoaXMgcGFnZSBhY2NvcmRpbmcgdG8gdGhlIGlzc3VlIGlkIG9yIHRoZSBpc3N1ZSB0aXRsZVxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBvcHRpb25zLmlzc3VlSWQgLSBUaGUgaWQgb2YgaXNzdWVcbiAgICogQHBhcmFtIG9wdGlvbnMucXVlcnkgLSBUaGUgcXVlcnkgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBjb21tZW50c1xuICAgKi9cbiAgYXN5bmMgZ2V0Q29tbWVudHMgKHtcbiAgICBhY2Nlc3NUb2tlbixcbiAgICBpc3N1ZUlkLFxuICAgIHF1ZXJ5OiB7XG4gICAgICBwYWdlID0gMSxcbiAgICAgIHBlclBhZ2UgPSAxMCxcbiAgICAgIHNvcnQgPSAnZGVzYycsXG4gICAgfSA9IHt9LFxuICB9KTogUHJvbWlzZTxWc3N1ZUFQSS5Db21tZW50cz4ge1xuICAgIGNvbnN0IGlzc3VlT3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIC8vIHRvIGF2b2lkIGNhY2hpbmdcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgfSxcbiAgICB9XG4gICAgY29uc3QgY29tbWVudHNPcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgLy8gcGFnaW5hdGlvblxuICAgICAgICAncGFnZSc6IHBhZ2UsXG4gICAgICAgICdwZXJfcGFnZSc6IHBlclBhZ2UsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBnaXRodWIgdjMgYXBpIGRvZXMgbm90IHN1cHBvcnQgc29ydCBmb3IgaXNzdWUgY29tbWVudHNcbiAgICAgICAgICogaGF2ZSBzZW50IGZlZWRiYWNrIHRvIGdpdGh1YiBzdXBwb3J0XG4gICAgICAgICAqL1xuICAgICAgICAvLyAnc29ydCc6ICdjcmVhdGVkJyxcbiAgICAgICAgLy8gJ2RpcmVjdGlvbic6IHNvcnQsXG4gICAgICAgIC8vIHRvIGF2b2lkIGNhY2hpbmdcbiAgICAgICAgJ3RpbWVzdGFtcCc6IERhdGUubm93KCksXG4gICAgICB9LFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQWNjZXB0JzogW1xuICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzLnJhdytqc29uJyxcbiAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52My5odG1sK2pzb24nLFxuICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnNxdWlycmVsLWdpcmwtcHJldmlldycsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH1cbiAgICBpZiAoYWNjZXNzVG9rZW4pIHtcbiAgICAgIGlzc3VlT3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGB0b2tlbiAke2FjY2Vzc1Rva2VufWAsXG4gICAgICB9XG4gICAgICBjb21tZW50c09wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYHRva2VuICR7YWNjZXNzVG9rZW59YFxuICAgIH1cblxuICAgIC8vIGdpdGh1YiB2MyBoYXZlIHRvIGdldCB0aGUgdG90YWwgY291bnQgb2YgY29tbWVudHMgYnkgcmVxdWVzdGluZyB0aGUgaXNzdWVcbiAgICBjb25zdCBbaXNzdWVSZXMsIGNvbW1lbnRzUmVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuJGh0dHAuZ2V0KGByZXBvcy8ke3RoaXMub3duZXJ9LyR7dGhpcy5yZXBvfS9pc3N1ZXMvJHtpc3N1ZUlkfWAsIGlzc3VlT3B0aW9ucyksXG4gICAgICB0aGlzLiRodHRwLmdldChgcmVwb3MvJHt0aGlzLm93bmVyfS8ke3RoaXMucmVwb30vaXNzdWVzLyR7aXNzdWVJZH0vY29tbWVudHNgLCBjb21tZW50c09wdGlvbnMpLFxuICAgIF0pXG5cbiAgICAvLyBpdCdzIGFubm95aW5nIHRoYXQgaGF2ZSB0byBnZXQgdGhlIHBhZ2UgYW5kIHBlcl9wYWdlIGZyb20gdGhlIGBMaW5rYCBoZWFkZXJcbiAgICBjb25zdCBsaW5rSGVhZGVyID0gY29tbWVudHNSZXMuaGVhZGVyc1snbGluayddIHx8IG51bGxcblxuICAgIHJldHVybiB7XG4gICAgICBjb3VudDogTnVtYmVyKGlzc3VlUmVzLmRhdGEuY29tbWVudHMpLFxuICAgICAgcGFnZTogcGFnZSxcbiAgICAgIHBlclBhZ2U6IGxpbmtIZWFkZXIgPyBOdW1iZXIobGlua0hlYWRlci5yZXBsYWNlKC9eLipwZXJfcGFnZT0oXFxkKikuKiQvLCAnJDEnKSkgOiBwZXJQYWdlLFxuICAgICAgZGF0YTogY29tbWVudHNSZXMuZGF0YS5tYXAobm9ybWFsaXplQ29tbWVudCksXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpc3N1ZVxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBvcHRpb25zLnRpdGxlIC0gVGhlIHRpdGxlIG9mIGlzc3VlXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbnRlbnQgLSBUaGUgY29udGVudCBvZiBpc3N1ZVxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBjcmVhdGVkIGlzc3VlXG4gICAqL1xuICBhc3luYyBjcmVhdGVJc3N1ZSAoe1xuICAgIGFjY2Vzc1Rva2VuLFxuICAgIHRpdGxlLFxuICAgIGNvbnRlbnQsXG4gIH0pOiBQcm9taXNlPFZzc3VlQVBJLklzc3VlPiB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiRodHRwLnBvc3QoYHJlcG9zLyR7dGhpcy5vd25lcn0vJHt0aGlzLnJlcG99L2lzc3Vlc2AsIHtcbiAgICAgIHRpdGxlLFxuICAgICAgYm9keTogY29udGVudCxcbiAgICAgIGxhYmVsczogdGhpcy5sYWJlbHMuc3BsaXQoJywnKSxcbiAgICB9LCB7XG4gICAgICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogYHRva2VuICR7YWNjZXNzVG9rZW59YCB9LFxuICAgIH0pXG4gICAgcmV0dXJuIG5vcm1hbGl6ZUlzc3VlKGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGNvbW1lbnRcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXNzVG9rZW4gLSBVc2VyIGFjY2VzcyB0b2tlblxuICAgKiBAcGFyYW0gb3B0aW9ucy5pc3N1ZUlkIC0gVGhlIGlkIG9mIGlzc3VlXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbnRlbnQgLSBUaGUgY29udGVudCBvZiBjb21tZW50XG4gICAqXG4gICAqIEByZXR1cm4gVGhlIGNyZWF0ZWQgY29tbWVudFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlQ29tbWVudCAoe1xuICAgIGFjY2Vzc1Rva2VuLFxuICAgIGlzc3VlSWQsXG4gICAgY29udGVudCxcbiAgfSk6IFByb21pc2U8VnNzdWVBUEkuQ29tbWVudD4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4kaHR0cC5wb3N0KGByZXBvcy8ke3RoaXMub3duZXJ9LyR7dGhpcy5yZXBvfS9pc3N1ZXMvJHtpc3N1ZUlkfS9jb21tZW50c2AsIHtcbiAgICAgIGJvZHk6IGNvbnRlbnQsXG4gICAgfSwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGB0b2tlbiAke2FjY2Vzc1Rva2VufWAsXG4gICAgICAgICdBY2NlcHQnOiBbXG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMucmF3K2pzb24nLFxuICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzLmh0bWwranNvbicsXG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIuc3F1aXJyZWwtZ2lybC1wcmV2aWV3JyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICByZXR1cm4gbm9ybWFsaXplQ29tbWVudChkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyByZWFjdGlvbiBvZiBpc3N1ZVxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBvcHRpb25zLmlzc3VlSWQgLSBUaGUgaWQgb2YgaXNzdWVcbiAgICogQHBhcmFtIG9wdGlvbnMucmVhY3Rpb24gLSBUaGUgcmVhY3Rpb25cbiAgICpcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgc3VjY2VlZCwgYGZhbHNlYCBpZiBhbHJlYWR5IHRva2VuXG4gICAqL1xuICBhc3luYyBjcmVhdGVJc3N1ZVJlYWN0aW9uICh7XG4gICAgYWNjZXNzVG9rZW4sXG4gICAgaXNzdWVJZCxcbiAgICByZWFjdGlvbixcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy4kaHR0cC5wb3N0KGByZXBvcy8ke3RoaXMub3duZXJ9LyR7dGhpcy5yZXBvfS9pc3N1ZXMvJHtpc3N1ZUlkfS9yZWFjdGlvbnNgLCB7XG4gICAgICBjb250ZW50OiBtYXBSZWFjdGlvbk5hbWUocmVhY3Rpb24pLFxuICAgIH0sIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0F1dGhvcml6YXRpb24nOiBgdG9rZW4gJHthY2Nlc3NUb2tlbn1gIH0sXG4gICAgfSlcbiAgICByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzID09PSAyMDFcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcmVhY3Rpb24gb2YgY29tbWVudFxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBvcHRpb25zLmlzc3VlSWQgLSBUaGUgaWQgb2YgaXNzdWVcbiAgICogQHBhcmFtIG9wdGlvbnMuY29tbWVudElkIC0gVGhlIGlkIG9mIGNvbW1lbnRcbiAgICogQHBhcmFtIG9wdGlvbnMucmVhY3Rpb24gLSBUaGUgcmVhY3Rpb25cbiAgICpcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgc3VjY2VlZCwgYGZhbHNlYCBpZiBhbHJlYWR5IHRva2VuXG4gICAqL1xuICBhc3luYyBjcmVhdGVDb21tZW50UmVhY3Rpb24gKHtcbiAgICBhY2Nlc3NUb2tlbixcbiAgICBpc3N1ZUlkLFxuICAgIGNvbW1lbnRJZCxcbiAgICByZWFjdGlvbixcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy4kaHR0cC5wb3N0KGByZXBvcy8ke3RoaXMub3duZXJ9LyR7dGhpcy5yZXBvfS9pc3N1ZXMvY29tbWVudHMvJHtjb21tZW50SWR9L3JlYWN0aW9uc2AsIHtcbiAgICAgIGNvbnRlbnQ6IG1hcFJlYWN0aW9uTmFtZShyZWFjdGlvbiksXG4gICAgfSwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGB0b2tlbiAke2FjY2Vzc1Rva2VufWAsXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi5zcXVpcnJlbC1naXJsLXByZXZpZXcnLFxuICAgICAgfSxcbiAgICB9KVxuICAgIHJldHVybiByZXNwb25zZS5zdGF0dXMgPT09IDIwMVxuICB9XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sS0FHTixNQUFNLE9BQU8sQ0FBQTtBQUVkLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFVBQVUsR0FDWCxNQUFNLGNBQWMsQ0FBQTtBQUVyQixPQUFPLEVBQ0wsYUFBYSxFQUNiLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGVBQWUsR0FDaEIsTUFBTSxTQUFTLENBQUE7QUFFaEI7Ozs7O0dBS0c7QUFDSDtJQVVFLGtCQUFhLEVBUU07WUFQakIsZUFBa0MsRUFBbEMsdURBQWtDLEVBQ2xDLGdCQUFLLEVBQ0wsY0FBSSxFQUNKLGtCQUFNLEVBQ04sc0JBQVEsRUFDUiw4QkFBWSxFQUNaLGdCQUFLO1FBRUwsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRTlCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBRWxCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN4QixPQUFPLFNBQUE7WUFDUCxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLGdDQUFnQzthQUMzQztTQUNGLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxRQUFRO1lBQ3JELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxL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QUM7QUFBRCxDQUFDLEFBOWJELElBOGJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVnNzdWVBUEkgfSBmcm9tICcuLi8uLi8uLi92c3N1ZS90eXBlcydcblxuaW1wb3J0IGF4aW9zLCB7XG4gIEF4aW9zSW5zdGFuY2UsXG4gIEF4aW9zUmVxdWVzdENvbmZpZyxcbn0gZnJvbSAnYXhpb3MnXG5cbmltcG9ydCB7XG4gIGJ1aWxkVVJMLFxuICBnZXRDbGVhblVSTCxcbiAgcGFyc2VRdWVyeSxcbn0gZnJvbSAnQHZzc3VlL3V0aWxzJ1xuXG5pbXBvcnQge1xuICBub3JtYWxpemVVc2VyLFxuICBub3JtYWxpemVJc3N1ZSxcbiAgbm9ybWFsaXplQ29tbWVudCxcbiAgbm9ybWFsaXplUmVhY3Rpb25zLFxuICBtYXBSZWFjdGlvbk5hbWUsXG59IGZyb20gJy4vdXRpbHMnXG5cbi8qKlxuICogR2l0aHViIFJFU1QgQVBJIHYzXG4gKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL2FwcHMvYnVpbGRpbmctb2F1dGgtYXBwcy9cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2l0aHViVjMgaW1wbGVtZW50cyBWc3N1ZUFQSS5JbnN0YW5jZSB7XG4gIGJhc2VVUkw6IHN0cmluZ1xuICBvd25lcjogc3RyaW5nXG4gIHJlcG86IHN0cmluZ1xuICBsYWJlbHM6IHN0cmluZ1xuICBjbGllbnRJZDogc3RyaW5nXG4gIGNsaWVudFNlY3JldDogc3RyaW5nXG4gIHN0YXRlOiBzdHJpbmdcbiAgJGh0dHA6IEF4aW9zSW5zdGFuY2VcblxuICBjb25zdHJ1Y3RvciAoe1xuICAgIGJhc2VVUkwgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbScsXG4gICAgb3duZXIsXG4gICAgcmVwbyxcbiAgICBsYWJlbHMsXG4gICAgY2xpZW50SWQsXG4gICAgY2xpZW50U2VjcmV0LFxuICAgIHN0YXRlLFxuICB9OiBWc3N1ZUFQSS5PcHRpb25zKSB7XG4gICAgdGhpcy5iYXNlVVJMID0gYmFzZVVSTFxuICAgIHRoaXMub3duZXIgPSBvd25lclxuICAgIHRoaXMucmVwbyA9IHJlcG9cbiAgICB0aGlzLmxhYmVscyA9IGxhYmVscy5qb2luKCcsJylcblxuICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZFxuICAgIHRoaXMuY2xpZW50U2VjcmV0ID0gY2xpZW50U2VjcmV0XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlXG5cbiAgICB0aGlzLiRodHRwID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uJyxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHRoaXMuJGh0dHAuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZS5kYXRhLmVycm9yX2Rlc2NyaXB0aW9uKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGxhdGZvcm0gYXBpIGluZm9cbiAgICovXG4gIGdldCBwbGF0Zm9ybSAoKTogVnNzdWVBUEkuUGxhdGZvcm0ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnR2l0SHViJyxcbiAgICAgIGxpbms6ICdodHRwczovL2dpdGh1Yi5jb20nLFxuICAgICAgdmVyc2lvbjogJ3YzJyxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgcmVhY3RhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRpcmVjdCB0byB0aGUgYXV0aG9yaXphdGlvbiBwYWdlIG9mIHBsYXRmb3JtLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vYXBwcy9idWlsZGluZy1vYXV0aC1hcHBzL2F1dGhvcml6aW5nLW9hdXRoLWFwcHMvIzEtcmVxdWVzdC1hLXVzZXJzLWdpdGh1Yi1pZGVudGl0eVxuICAgKi9cbiAgcmVkaXJlY3RBdXRoICgpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGJ1aWxkVVJMKCdodHRwczovL2dpdGh1Yi5jb20vbG9naW4vb2F1dGgvYXV0aG9yaXplJywge1xuICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgcmVkaXJlY3RfdXJpOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIHNjb3BlOiAncHVibGljX3JlcG8nLFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYXV0aG9yaXphdGlvbi5cbiAgICpcbiAgICogQHJldHVybiBBIHN0cmluZyBmb3IgYWNjZXNzIHRva2VuLCBgbnVsbGAgZm9yIG5vIGF1dGhvcml6YXRpb24gY29kZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vYXBwcy9idWlsZGluZy1vYXV0aC1hcHBzL2F1dGhvcml6aW5nLW9hdXRoLWFwcHMvXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHRoZSBgY29kZWAgYW5kIGBzdGF0ZWAgZXhpc3QgaW4gdGhlIHF1ZXJ5LCBhbmQgdGhlIGBzdGF0ZWAgbWF0Y2hlcywgcmVtb3ZlIHRoZW0gZnJvbSBxdWVyeSwgYW5kIHRyeSB0byBnZXQgdGhlIGFjY2VzcyB0b2tlbi5cbiAgICovXG4gIGFzeW5jIGhhbmRsZUF1dGggKCk6IFByb21pc2U8VnNzdWVBUEkuQWNjZXNzVG9rZW4+IHtcbiAgICBjb25zdCBxdWVyeSA9IHBhcnNlUXVlcnkod2luZG93LmxvY2F0aW9uLnNlYXJjaClcbiAgICBpZiAocXVlcnkuY29kZSkge1xuICAgICAgaWYgKHF1ZXJ5LnN0YXRlICE9PSB0aGlzLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBjb25zdCBjb2RlID0gcXVlcnkuY29kZVxuICAgICAgZGVsZXRlIHF1ZXJ5LmNvZGVcbiAgICAgIGRlbGV0ZSBxdWVyeS5zdGF0ZVxuICAgICAgY29uc3QgcmVwbGFjZVVSTCA9IGJ1aWxkVVJMKGdldENsZWFuVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSwgcXVlcnkpICsgd2luZG93LmxvY2F0aW9uLmhhc2hcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgcmVwbGFjZVVSTClcbiAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbih7IGNvZGUgfSlcbiAgICAgIHJldHVybiBhY2Nlc3NUb2tlblxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGFjY2VzcyB0b2tlbiB2aWEgYGNvZGVgXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvZGUgLSBUaGUgY29kZSBmcm9tIHRoZSBxdWVyeVxuICAgKlxuICAgKiBAcmV0dXJuIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS9hcHBzL2J1aWxkaW5nLW9hdXRoLWFwcHMvYXV0aG9yaXppbmctb2F1dGgtYXBwcy8jMi11c2Vycy1hcmUtcmVkaXJlY3RlZC1iYWNrLXRvLXlvdXItc2l0ZS1ieS1naXRodWJcbiAgICovXG4gIGFzeW5jIGdldEFjY2Vzc1Rva2VuICh7XG4gICAgY29kZSxcbiAgfToge1xuICAgIGNvZGU6IHN0cmluZ1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvKipcbiAgICAgKiBhY2Nlc3NfdG9rZW4gYXBpIGRvZXMgbm90IHN1cHBvcnQgY29yc1xuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9naXRodWIvaXNzdWVzLzMzMFxuICAgICAqL1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4kaHR0cC5wb3N0KGBodHRwczovL2NvcnMtYW55d2hlcmUuaGVyb2t1YXBwLmNvbS8keydodHRwczovL2dpdGh1Yi5jb20vbG9naW4vb2F1dGgvYWNjZXNzX3Rva2VuJ31gLCB7XG4gICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudFNlY3JldCxcbiAgICAgIGNvZGUsXG4gICAgICAvKipcbiAgICAgICAqIHVzZWxlc3MgYnV0IG1lbnRpb25lZCBpbiBkb2NzXG4gICAgICAgKi9cbiAgICAgIC8vIHJlZGlyZWN0X3VyaTogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAvLyBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICB9LCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgIH0pXG4gICAgcmV0dXJuIGRhdGEuYWNjZXNzX3Rva2VuXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb2dpbmVkIHVzZXIgd2l0aCBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zLmFjY2Vzc1Rva2VuIC0gVXNlciBhY2Nlc3MgdG9rZW5cbiAgICpcbiAgICogQHJldHVybiBUaGUgdXNlclxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvdXNlcnMvI2dldC10aGUtYXV0aGVudGljYXRlZC11c2VyXG4gICAqL1xuICBhc3luYyBnZXRVc2VyICh7XG4gICAgYWNjZXNzVG9rZW4sXG4gIH06IHtcbiAgICBhY2Nlc3NUb2tlbjogVnNzdWVBUEkuQWNjZXNzVG9rZW5cbiAgfSk6IFByb21pc2U8VnNzdWVBUEkuVXNlcj4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4kaHR0cC5nZXQoJy91c2VyJywge1xuICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGB0b2tlbiAke2FjY2Vzc1Rva2VufWAgfSxcbiAgICB9KVxuICAgIHJldHVybiBub3JtYWxpemVVc2VyKGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogR2V0IGlzc3VlIG9mIHRoaXMgcGFnZSBhY2NvcmRpbmcgdG8gdGhlIGlzc3VlIGlkIG9yIHRoZSBpc3N1ZSB0aXRsZVxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBvcHRpb25zLmlzc3VlSWQgLSBUaGUgaWQgb2YgaXNzdWVcbiAgICogQHBhcmFtIG9wdGlvbnMuaXNzdWVUaXRsZSAtIFRoZSB0aXRsZSBvZiBpc3N1ZVxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSByYXcgcmVzcG9uc2Ugb2YgaXNzdWVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL2lzc3Vlcy8jbGlzdC1pc3N1ZXMtZm9yLWEtcmVwb3NpdG9yeVxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvaXNzdWVzLyNnZXQtYS1zaW5nbGUtaXNzdWVcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzLyNwYWdpbmF0aW9uXG4gICAqL1xuICBhc3luYyBnZXRJc3N1ZSAoe1xuICAgIGFjY2Vzc1Rva2VuLFxuICAgIGlzc3VlSWQsXG4gICAgaXNzdWVUaXRsZSxcbiAgfToge1xuICAgIGFjY2Vzc1Rva2VuOiBWc3N1ZUFQSS5BY2Nlc3NUb2tlblxuICAgIGlzc3VlSWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgICBpc3N1ZVRpdGxlPzogc3RyaW5nXG4gIH0pOiBQcm9taXNlPFZzc3VlQVBJLklzc3VlIHwgbnVsbD4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHt9XG5cbiAgICBpZiAoYWNjZXNzVG9rZW4pIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgdG9rZW4gJHthY2Nlc3NUb2tlbn1gLFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3N1ZUlkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBvcHRpb25zLnBhcmFtcyA9IHtcbiAgICAgICAgICAvLyB0byBhdm9pZCBjYWNoaW5nXG4gICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4kaHR0cC5nZXQoYHJlcG9zLyR7dGhpcy5vd25lcn0vJHt0aGlzLnJlcG99L2lzc3Vlcy8ke2lzc3VlSWR9YCwgb3B0aW9ucylcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUlzc3VlKGRhdGEpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlLnJlc3BvbnNlICYmIGUucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnBhcmFtcyA9IHtcbiAgICAgICAgbGFiZWxzOiB0aGlzLmxhYmVscyxcbiAgICAgICAgc29ydDogJ2NyZWF0ZWQnLFxuICAgICAgICBkaXJlY3Rpb246ICdhc2MnLFxuICAgICAgICAvLyB0byBhdm9pZCBjYWNoaW5nXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4kaHR0cC5nZXQoYHJlcG9zLyR7dGhpcy5vd25lcn0vJHt0aGlzLnJlcG99L2lzc3Vlc2AsIG9wdGlvbnMpXG4gICAgICBjb25zdCBpc3N1ZSA9IGRhdGEubWFwKG5vcm1hbGl6ZUlzc3VlKS5maW5kKGl0ZW0gPT4gaXRlbS50aXRsZSA9PT0gaXNzdWVUaXRsZSlcbiAgICAgIHJldHVybiBpc3N1ZSB8fCBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpc3N1ZVxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBvcHRpb25zLnRpdGxlIC0gVGhlIHRpdGxlIG9mIGlzc3VlXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbnRlbnQgLSBUaGUgY29udGVudCBvZiBpc3N1ZVxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBjcmVhdGVkIGlzc3VlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9pc3N1ZXMvI2NyZWF0ZS1hbi1pc3N1ZVxuICAgKi9cbiAgYXN5bmMgcG9zdElzc3VlICh7XG4gICAgYWNjZXNzVG9rZW4sXG4gICAgdGl0bGUsXG4gICAgY29udGVudCxcbiAgfToge1xuICAgIGFjY2Vzc1Rva2VuOiBWc3N1ZUFQSS5BY2Nlc3NUb2tlblxuICAgIHRpdGxlOiBzdHJpbmdcbiAgICBjb250ZW50OiBzdHJpbmdcbiAgfSk6IFByb21pc2U8VnNzdWVBUEkuSXNzdWU+IHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuJGh0dHAucG9zdChgcmVwb3MvJHt0aGlzLm93bmVyfS8ke3RoaXMucmVwb30vaXNzdWVzYCwge1xuICAgICAgdGl0bGUsXG4gICAgICBib2R5OiBjb250ZW50LFxuICAgICAgbGFiZWxzOiB0aGlzLmxhYmVscy5zcGxpdCgnLCcpLFxuICAgIH0sIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0F1dGhvcml6YXRpb24nOiBgdG9rZW4gJHthY2Nlc3NUb2tlbn1gIH0sXG4gICAgfSlcbiAgICByZXR1cm4gbm9ybWFsaXplSXNzdWUoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29tbWVudHMgb2YgdGhpcyBwYWdlIGFjY29yZGluZyB0byB0aGUgaXNzdWUgaWQgb3IgdGhlIGlzc3VlIHRpdGxlXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zLmFjY2Vzc1Rva2VuIC0gVXNlciBhY2Nlc3MgdG9rZW5cbiAgICogQHBhcmFtIG9wdGlvbnMuaXNzdWVJZCAtIFRoZSBpZCBvZiBpc3N1ZVxuICAgKiBAcGFyYW0gb3B0aW9ucy5xdWVyeSAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEByZXR1cm4gVGhlIGNvbW1lbnRzXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9pc3N1ZXMvY29tbWVudHMvI2xpc3QtY29tbWVudHMtb24tYW4taXNzdWVcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzLyNwYWdpbmF0aW9uXG4gICAqXG4gICAqIEByZWFtcmtzXG4gICAqIEdpdGh1YiBWMyBkb2VzIG5vdCBzdXBwb3J0IHNvcnQgZm9yIGlzc3VlIGNvbW1lbnRzIG5vdy5cbiAgICogR2l0aHViIFYzIGhhdmUgdG8gcmVxdWVzdCB0aGUgcGFyZW50IGlzc3VlIHRvIGdldCB0aGUgY291bnQgb2YgY29tbWVudHMuXG4gICAqL1xuICBhc3luYyBnZXRDb21tZW50cyAoe1xuICAgIGFjY2Vzc1Rva2VuLFxuICAgIGlzc3VlSWQsXG4gICAgcXVlcnk6IHtcbiAgICAgIHBhZ2UgPSAxLFxuICAgICAgcGVyUGFnZSA9IDEwLFxuICAgICAgc29ydCA9ICdkZXNjJyxcbiAgICB9ID0ge30sXG4gIH06IHtcbiAgICBhY2Nlc3NUb2tlbjogVnNzdWVBUEkuQWNjZXNzVG9rZW5cbiAgICBpc3N1ZUlkOiBzdHJpbmcgfCBudW1iZXJcbiAgICBxdWVyeT86IFBhcnRpYWw8VnNzdWVBUEkuUXVlcnk+XG4gIH0pOiBQcm9taXNlPFZzc3VlQVBJLkNvbW1lbnRzPiB7XG4gICAgY29uc3QgaXNzdWVPcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgLy8gdG8gYXZvaWQgY2FjaGluZ1xuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICB9LFxuICAgIH1cbiAgICBjb25zdCBjb21tZW50c09wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICAvLyBwYWdpbmF0aW9uXG4gICAgICAgICdwYWdlJzogcGFnZSxcbiAgICAgICAgJ3Blcl9wYWdlJzogcGVyUGFnZSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGdpdGh1YiB2MyBhcGkgZG9lcyBub3Qgc3VwcG9ydCBzb3J0IGZvciBpc3N1ZSBjb21tZW50c1xuICAgICAgICAgKiBoYXZlIHNlbnQgZmVlZGJhY2sgdG8gZ2l0aHViIHN1cHBvcnRcbiAgICAgICAgICovXG4gICAgICAgIC8vICdzb3J0JzogJ2NyZWF0ZWQnLFxuICAgICAgICAvLyAnZGlyZWN0aW9uJzogc29ydCxcbiAgICAgICAgLy8gdG8gYXZvaWQgY2FjaGluZ1xuICAgICAgICAndGltZXN0YW1wJzogRGF0ZS5ub3coKSxcbiAgICAgIH0sXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBY2NlcHQnOiBbXG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMucmF3K2pzb24nLFxuICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzLmh0bWwranNvbicsXG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIuc3F1aXJyZWwtZ2lybC1wcmV2aWV3JyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGlmIChhY2Nlc3NUb2tlbikge1xuICAgICAgaXNzdWVPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYHRva2VuICR7YWNjZXNzVG9rZW59YCxcbiAgICAgIH1cbiAgICAgIGNvbW1lbnRzT3B0aW9ucy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgdG9rZW4gJHthY2Nlc3NUb2tlbn1gXG4gICAgfVxuXG4gICAgLy8gZ2l0aHViIHYzIGhhdmUgdG8gZ2V0IHRoZSB0b3RhbCBjb3VudCBvZiBjb21tZW50cyBieSByZXF1ZXN0aW5nIHRoZSBpc3N1ZVxuICAgIGNvbnN0IFtpc3N1ZVJlcywgY29tbWVudHNSZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy4kaHR0cC5nZXQoYHJlcG9zLyR7dGhpcy5vd25lcn0vJHt0aGlzLnJlcG99L2lzc3Vlcy8ke2lzc3VlSWR9YCwgaXNzdWVPcHRpb25zKSxcbiAgICAgIHRoaXMuJGh0dHAuZ2V0KGByZXBvcy8ke3RoaXMub3duZXJ9LyR7dGhpcy5yZXBvfS9pc3N1ZXMvJHtpc3N1ZUlkfS9jb21tZW50c2AsIGNvbW1lbnRzT3B0aW9ucyksXG4gICAgXSlcblxuICAgIC8vIGl0J3MgYW5ub3lpbmcgdGhhdCBoYXZlIHRvIGdldCB0aGUgcGFnZSBhbmQgcGVyX3BhZ2UgZnJvbSB0aGUgYExpbmtgIGhlYWRlclxuICAgIGNvbnN0IGxpbmtIZWFkZXIgPSBjb21tZW50c1Jlcy5oZWFkZXJzWydsaW5rJ10gfHwgbnVsbFxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvdW50OiBOdW1iZXIoaXNzdWVSZXMuZGF0YS5jb21tZW50cyksXG4gICAgICBwYWdlOiBwYWdlLFxuICAgICAgcGVyUGFnZTogbGlua0hlYWRlciA/IE51bWJlcihsaW5rSGVhZGVyLnJlcGxhY2UoL14uKnBlcl9wYWdlPShcXGQqKS4qJC8sICckMScpKSA6IHBlclBhZ2UsXG4gICAgICBkYXRhOiBjb21tZW50c1Jlcy5kYXRhLm1hcChub3JtYWxpemVDb21tZW50KSxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGNvbW1lbnRcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXNzVG9rZW4gLSBVc2VyIGFjY2VzcyB0b2tlblxuICAgKiBAcGFyYW0gb3B0aW9ucy5pc3N1ZUlkIC0gVGhlIGlkIG9mIGlzc3VlXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbnRlbnQgLSBUaGUgY29udGVudCBvZiBjb21tZW50XG4gICAqXG4gICAqIEByZXR1cm4gVGhlIGNyZWF0ZWQgY29tbWVudFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvaXNzdWVzL2NvbW1lbnRzLyNjcmVhdGUtYS1jb21tZW50XG4gICAqL1xuICBhc3luYyBwb3N0Q29tbWVudCAoe1xuICAgIGFjY2Vzc1Rva2VuLFxuICAgIGlzc3VlSWQsXG4gICAgY29udGVudCxcbiAgfToge1xuICAgIGFjY2Vzc1Rva2VuOiBWc3N1ZUFQSS5BY2Nlc3NUb2tlblxuICAgIGlzc3VlSWQ6IHN0cmluZyB8IG51bWJlclxuICAgIGNvbnRlbnQ6IHN0cmluZ1xuICB9KTogUHJvbWlzZTxWc3N1ZUFQSS5Db21tZW50PiB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiRodHRwLnBvc3QoYHJlcG9zLyR7dGhpcy5vd25lcn0vJHt0aGlzLnJlcG99L2lzc3Vlcy8ke2lzc3VlSWR9L2NvbW1lbnRzYCwge1xuICAgICAgYm9keTogY29udGVudCxcbiAgICB9LCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYHRva2VuICR7YWNjZXNzVG9rZW59YCxcbiAgICAgICAgJ0FjY2VwdCc6IFtcbiAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52My5yYXcranNvbicsXG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMuaHRtbCtqc29uJyxcbiAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi5zcXVpcnJlbC1naXJsLXByZXZpZXcnLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KVxuICAgIHJldHVybiBub3JtYWxpemVDb21tZW50KGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgY29tbWVudFxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hY2Nlc3NUb2tlbiAtIFVzZXIgYWNjZXNzIHRva2VuXG4gICAqIEBwYXJhbSBvcHRpb25zLmNvbW1lbnRJZCAtIFRoZSBpZCBvZiBjb21tZW50XG4gICAqXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHN1Y2NlZWQsIGBmYWxzZWAgaWYgZmFpbGVkXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9pc3N1ZXMvY29tbWVudHMvI2RlbGV0ZS1hLWNvbW1lbnRcbiAgICovXG4gIGFzeW5jIGRlbGV0ZUNvbW1lbnQgKHtcbiAgICBhY2Nlc3NUb2tlbixcbiAgICBjb21tZW50SWQsXG4gIH06IHtcbiAgICBhY2Nlc3NUb2tlbjogVnNzdWVBUEkuQWNjZXNzVG9rZW5cbiAgICBpc3N1ZUlkOiBzdHJpbmcgfCBudW1iZXJcbiAgICBjb21tZW50SWQ6IHN0cmluZyB8IG51bWJlclxuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHRoaXMuJGh0dHAuZGVsZXRlKGByZXBvcy8ke3RoaXMub3duZXJ9LyR7dGhpcy5yZXBvfS9pc3N1ZXMvY29tbWVudHMvJHtjb21tZW50SWR9YCwge1xuICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGB0b2tlbiAke2FjY2Vzc1Rva2VufWAgfSxcbiAgICB9KVxuICAgIHJldHVybiBzdGF0dXMgPT09IDIwNFxuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZWFjdGlvbnMgb2YgYSBjb21tZW50XG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zLmFjY2Vzc1Rva2VuIC0gVXNlciBhY2Nlc3MgdG9rZW5cbiAgICogQHBhcmFtIG9wdGlvbnMuY29tbWVudElkIC0gVGhlIGlkIG9mIGNvbW1lbnRcbiAgICpcbiAgICogQHJldHVybiBUaGUgY29tbWVudHNcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL2lzc3Vlcy9jb21tZW50cy8jZ2V0LWEtc2luZ2xlLWNvbW1lbnRcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL3JlYWN0aW9ucy8jbGlzdC1yZWFjdGlvbnMtZm9yLWFuLWlzc3VlLWNvbW1lbnRcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGBMaXN0IHJlYWN0aW9ucyBmb3IgYW4gaXNzdWUgY29tbWVudGAgQVBJIGFsc28gcmV0dXJucyBhdXRob3Igb2YgZWFjaCByZWFjdGlvbi5cbiAgICogQXMgd2Ugb25seSBuZWVkIHRoZSBjb3VudCwgdXNlIHRoZSBgR2V0IGEgc2luZ2xlIGNvbW1lbnRgIEFQSSBpcyBtdWNoIHNpbXBsZXIuXG4gICAqL1xuICBhc3luYyBnZXRDb21tZW50UmVhY3Rpb25zICh7XG4gICAgYWNjZXNzVG9rZW4sXG4gICAgY29tbWVudElkLFxuICB9OiB7XG4gICAgYWNjZXNzVG9rZW46IFZzc3VlQVBJLkFjY2Vzc1Rva2VuXG4gICAgaXNzdWVJZDogc3RyaW5nIHwgbnVtYmVyXG4gICAgY29tbWVudElkOiBzdHJpbmcgfCBudW1iZXJcbiAgfSk6IFByb21pc2U8VnNzdWVBUEkuUmVhY3Rpb25zPiB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiRodHRwLmdldChgcmVwb3MvJHt0aGlzLm93bmVyfS8ke3RoaXMucmVwb30vaXNzdWVzL2NvbW1lbnRzLyR7Y29tbWVudElkfWAsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgdG9rZW4gJHthY2Nlc3NUb2tlbn1gLFxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIuc3F1aXJyZWwtZ2lybC1wcmV2aWV3JyxcbiAgICAgIH0sXG4gICAgfSlcbiAgICByZXR1cm4gbm9ybWFsaXplUmVhY3Rpb25zKGRhdGEucmVhY3Rpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyByZWFjdGlvbiBvZiBhIGNvbW1lbnRcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXNzVG9rZW4gLSBVc2VyIGFjY2VzcyB0b2tlblxuICAgKiBAcGFyYW0gb3B0aW9ucy5jb21tZW50SWQgLSBUaGUgaWQgb2YgY29tbWVudFxuICAgKiBAcGFyYW0gb3B0aW9ucy5yZWFjdGlvbiAtIFRoZSByZWFjdGlvblxuICAgKlxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiBzdWNjZWVkLCBgZmFsc2VgIGlmIGFscmVhZHkgdG9rZW5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL3JlYWN0aW9ucy8jY3JlYXRlLXJlYWN0aW9uLWZvci1hbi1pc3N1ZS1jb21tZW50XG4gICAqL1xuICBhc3luYyBwb3N0Q29tbWVudFJlYWN0aW9uICh7XG4gICAgYWNjZXNzVG9rZW4sXG4gICAgY29tbWVudElkLFxuICAgIHJlYWN0aW9uLFxuICB9OiB7XG4gICAgYWNjZXNzVG9rZW46IFZzc3VlQVBJLkFjY2Vzc1Rva2VuXG4gICAgaXNzdWVJZDogc3RyaW5nIHwgbnVtYmVyXG4gICAgY29tbWVudElkOiBzdHJpbmcgfCBudW1iZXJcbiAgICByZWFjdGlvbjoga2V5b2YgVnNzdWVBUEkuUmVhY3Rpb25zXG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuJGh0dHAucG9zdChgcmVwb3MvJHt0aGlzLm93bmVyfS8ke3RoaXMucmVwb30vaXNzdWVzL2NvbW1lbnRzLyR7Y29tbWVudElkfS9yZWFjdGlvbnNgLCB7XG4gICAgICBjb250ZW50OiBtYXBSZWFjdGlvbk5hbWUocmVhY3Rpb24pLFxuICAgIH0sIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgdG9rZW4gJHthY2Nlc3NUb2tlbn1gLFxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIuc3F1aXJyZWwtZ2lybC1wcmV2aWV3JyxcbiAgICAgIH0sXG4gICAgfSlcbiAgICByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzID09PSAyMDFcbiAgfVxufVxuIl19 |
{ | ||
"name": "@vssue/api-github-v3", | ||
"version": "0.2.0", | ||
"version": "0.3.0", | ||
"description": "Vssue api for github v3", | ||
@@ -29,9 +29,9 @@ "license": "MIT", | ||
"dependencies": { | ||
"@vssue/utils": "^0.2.0", | ||
"@vssue/utils": "^0.3.0", | ||
"axios": "^0.18.0" | ||
}, | ||
"peerDependencies": { | ||
"vssue": "^0.1.0" | ||
"vssue": "^0.3.0" | ||
}, | ||
"gitHead": "b766459604ded3b56082a642a88e211433c7dbc2" | ||
"gitHead": "3f37354a2ba2477e39dbaa2d9bd773d174837a24" | ||
} |
@@ -1,10 +0,8 @@ | ||
import { VssueAPI, VssueAPIOptions } from 'vssue'; | ||
import { VssueAPI } from '../../../vssue/types'; | ||
import { AxiosInstance } from 'axios'; | ||
/** | ||
* Github API v3 | ||
* Github REST API v3 | ||
* | ||
* @see https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/ | ||
* @see https://developer.github.com/v3/issues/ | ||
* @see https://developer.github.com/v3/issues/comments/ | ||
* @see https://developer.github.com/v3/reactions/ | ||
* @see https://developer.github.com/v3/ | ||
* @see https://developer.github.com/apps/building-oauth-apps/ | ||
*/ | ||
@@ -20,3 +18,3 @@ export default class GithubV3 implements VssueAPI.Instance { | ||
$http: AxiosInstance; | ||
constructor({ baseURL, owner, repo, labels, clientId, clientSecret, state, }: VssueAPIOptions); | ||
constructor({ baseURL, owner, repo, labels, clientId, clientSecret, state, }: VssueAPI.Options); | ||
/** | ||
@@ -28,2 +26,4 @@ * The platform api info | ||
* Redirect to the authorization page of platform. | ||
* | ||
* @see https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#1-request-a-users-github-identity | ||
*/ | ||
@@ -34,8 +34,10 @@ redirectAuth(): void; | ||
* | ||
* @return A string for access token, `null` for no authorization code | ||
* | ||
* @see https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/ | ||
* | ||
* @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>; | ||
handleAuth(): Promise<VssueAPI.AccessToken>; | ||
/** | ||
@@ -47,4 +49,6 @@ * Get user access token via `code` | ||
* @return User access token | ||
* | ||
* @see https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#2-users-are-redirected-back-to-your-site-by-github | ||
*/ | ||
getAccessToken({ code }: { | ||
getAccessToken({ code, }: { | ||
code: string; | ||
@@ -58,5 +62,7 @@ }): Promise<string>; | ||
* @return The user | ||
* | ||
* @see https://developer.github.com/v3/users/#get-the-authenticated-user | ||
*/ | ||
getUser({ accessToken }: { | ||
accessToken: any; | ||
getUser({ accessToken, }: { | ||
accessToken: VssueAPI.AccessToken; | ||
}): Promise<VssueAPI.User>; | ||
@@ -71,9 +77,29 @@ /** | ||
* @return The raw response of issue | ||
* | ||
* @see https://developer.github.com/v3/issues/#list-issues-for-a-repository | ||
* @see https://developer.github.com/v3/issues/#get-a-single-issue | ||
* @see https://developer.github.com/v3/#pagination | ||
*/ | ||
getIssue({ accessToken, issueId, issueTitle, }: { | ||
accessToken: any; | ||
issueId: any; | ||
issueTitle: any; | ||
accessToken: VssueAPI.AccessToken; | ||
issueId?: string | number; | ||
issueTitle?: string; | ||
}): Promise<VssueAPI.Issue | null>; | ||
/** | ||
* 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 | ||
* | ||
* @see https://developer.github.com/v3/issues/#create-an-issue | ||
*/ | ||
postIssue({ accessToken, title, content, }: { | ||
accessToken: VssueAPI.AccessToken; | ||
title: string; | ||
content: string; | ||
}): Promise<VssueAPI.Issue>; | ||
/** | ||
* Get comments of this page according to the issue id or the issue title | ||
@@ -86,27 +112,16 @@ * | ||
* @return The comments | ||
* | ||
* @see https://developer.github.com/v3/issues/comments/#list-comments-on-an-issue | ||
* @see https://developer.github.com/v3/#pagination | ||
* | ||
* @reamrks | ||
* Github V3 does not support sort for issue comments now. | ||
* Github V3 have to request the parent issue to get the count of comments. | ||
*/ | ||
getComments({ accessToken, issueId, query: { page, perPage, sort, }, }: { | ||
accessToken: any; | ||
issueId: any; | ||
query?: { | ||
page?: number | undefined; | ||
perPage?: number | undefined; | ||
sort?: string | undefined; | ||
} | undefined; | ||
accessToken: VssueAPI.AccessToken; | ||
issueId: string | number; | ||
query?: Partial<VssueAPI.Query>; | ||
}): Promise<VssueAPI.Comments>; | ||
/** | ||
* 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; | ||
title: any; | ||
content: any; | ||
}): Promise<VssueAPI.Issue>; | ||
/** | ||
* Create a new comment | ||
@@ -119,38 +134,62 @@ * | ||
* @return The created comment | ||
* | ||
* @see https://developer.github.com/v3/issues/comments/#create-a-comment | ||
*/ | ||
createComment({ accessToken, issueId, content, }: { | ||
accessToken: any; | ||
issueId: any; | ||
content: any; | ||
postComment({ accessToken, issueId, content, }: { | ||
accessToken: VssueAPI.AccessToken; | ||
issueId: string | number; | ||
content: string; | ||
}): Promise<VssueAPI.Comment>; | ||
/** | ||
* Create a new reaction of issue | ||
* Delete a comment | ||
* | ||
* @param options.accessToken - User access token | ||
* @param options.issueId - The id of issue | ||
* @param options.reaction - The reaction | ||
* @param options.commentId - The id of comment | ||
* | ||
* @return `true` if succeed, `false` if already token | ||
* @return `true` if succeed, `false` if failed | ||
* | ||
* @see https://developer.github.com/v3/issues/comments/#delete-a-comment | ||
*/ | ||
createIssueReaction({ accessToken, issueId, reaction, }: { | ||
accessToken: any; | ||
issueId: any; | ||
reaction: any; | ||
deleteComment({ accessToken, commentId, }: { | ||
accessToken: VssueAPI.AccessToken; | ||
issueId: string | number; | ||
commentId: string | number; | ||
}): Promise<boolean>; | ||
/** | ||
* Create a new reaction of comment | ||
* Get reactions of a comment | ||
* | ||
* @param options.accessToken - User access token | ||
* @param options.issueId - The id of issue | ||
* @param options.commentId - The id of comment | ||
* | ||
* @return The comments | ||
* | ||
* @see https://developer.github.com/v3/issues/comments/#get-a-single-comment | ||
* @see https://developer.github.com/v3/reactions/#list-reactions-for-an-issue-comment | ||
* | ||
* @remarks | ||
* The `List reactions for an issue comment` API also returns author of each reaction. | ||
* As we only need the count, use the `Get a single comment` API is much simpler. | ||
*/ | ||
getCommentReactions({ accessToken, commentId, }: { | ||
accessToken: VssueAPI.AccessToken; | ||
issueId: string | number; | ||
commentId: string | number; | ||
}): Promise<VssueAPI.Reactions>; | ||
/** | ||
* Create a new reaction of a comment | ||
* | ||
* @param options.accessToken - User access token | ||
* @param options.commentId - The id of comment | ||
* @param options.reaction - The reaction | ||
* | ||
* @return `true` if succeed, `false` if already token | ||
* | ||
* @see https://developer.github.com/v3/reactions/#create-reaction-for-an-issue-comment | ||
*/ | ||
createCommentReaction({ accessToken, issueId, commentId, reaction, }: { | ||
accessToken: any; | ||
issueId: any; | ||
commentId: any; | ||
reaction: any; | ||
postCommentReaction({ accessToken, commentId, reaction, }: { | ||
accessToken: VssueAPI.AccessToken; | ||
issueId: string | number; | ||
commentId: string | number; | ||
reaction: keyof VssueAPI.Reactions; | ||
}): Promise<boolean>; | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
61664
709
0
+ Added@vssue/api-bitbucket-v2@0.3.1(transitive)
+ Added@vssue/api-github-v3@0.3.1(transitive)
+ Added@vssue/api-gitlab-v4@0.3.1(transitive)
+ Added@vssue/utils@0.3.1(transitive)
+ Addedvssue@0.3.1(transitive)
- Removed@vssue/api-bitbucket-v2@0.1.9(transitive)
- Removed@vssue/api-github-v3@0.1.9(transitive)
- Removed@vssue/api-gitlab-v4@0.1.9(transitive)
- Removed@vssue/utils@0.1.20.2.0(transitive)
- Removedvssue@0.1.9(transitive)
Updated@vssue/utils@^0.3.0