Socket
Socket
Sign inDemoInstall

@vssue/api-github-v3

Package Overview
Dependencies
Maintainers
1
Versions
39
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@vssue/api-github-v3 - npm Package Compare versions

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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUtBLE9BQU8sS0FHTixNQUFNLE9BQU8sQ0FBQTtBQUVkLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFVBQVUsR0FDWCxNQUFNLGNBQWMsQ0FBQTtBQUVyQixPQUFPLEVBQ0wsYUFBYSxFQUNiLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsZUFBZSxHQUNoQixNQUFNLFNBQVMsQ0FBQTtBQUVoQjs7Ozs7OztHQU9HO0FBQ0g7SUFVRSxrQkFBYSxFQVFLO1lBUGhCLGVBQWtDLEVBQWxDLHVEQUFrQyxFQUNsQyxnQkFBSyxFQUNMLGNBQUksRUFDSixrQkFBTSxFQUNOLHNCQUFRLEVBQ1IsOEJBQVksRUFDWixnQkFBSztRQUVMLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUU5QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUVsQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDeEIsT0FBTyxTQUFBO1lBQ1AsT0FBTyxFQUFFO2dCQUNQLFFBQVEsRUFBRSxnQ0FBZ0M7YUFDM0M7U0FDRixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsUUFBUTtZQUNyRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dC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LENBQUM7eUJBQ25DLEVBQUU7NEJBQ0QsT0FBTyxFQUFFLEVBQUUsZUFBZSxFQUFFLFdBQVMsV0FBYSxFQUFFO3lCQUNyRCxDQUFDLEVBQUE7O3dCQUpJLFFBQVEsR0FBRyxTQUlmO3dCQUNGLHNCQUFPLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFBOzs7O0tBQy9CO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0csd0NBQXFCLEdBQTNCLFVBQTZCLEVBSzVCO1lBSkMsNEJBQVcsRUFDWCxvQkFBTyxFQUNQLHdCQUFTLEVBQ1Qsc0JBQVE7Ozs7OzRCQUVTLHFCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVMsSUFBSSxDQUFDLEtBQUssU0FBSSxJQUFJLENBQUMsSUFBSSx5QkFBb0IsU0FBUyxlQUFZLEVBQUU7NEJBQ2hILE9BQU8sRUFBRSxlQUFlLENBQUMsUUFBUSxDQUFDO3lCQUNuQyxFQUFFOzRCQUNELE9BQU8sRUFBRTtnQ0FDUCxlQUFlLEVBQUUsV0FBUyxXQUFhO2dDQUN2QyxRQUFRLEVBQUUsOENBQThDOzZCQUN6RDt5QkFDRixDQUFDLEVBQUE7O3dCQVBJLFFBQVEsR0FBRyxTQU9mO3dCQUNGLHNCQUFPLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFBOzs7O0tBQy9CO0lBQ0gsZUFBQztBQUFELENBQUMsQUF6V0QsSUF5V0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBWc3N1ZUFQSSxcbiAgVnNzdWVBUElPcHRpb25zLFxufSBmcm9tICd2c3N1ZSdcblxuaW1wb3J0IGF4aW9zLCB7XG4gIEF4aW9zSW5zdGFuY2UsXG4gIEF4aW9zUmVxdWVzdENvbmZpZyxcbn0gZnJvbSAnYXhpb3MnXG5cbmltcG9ydCB7XG4gIGJ1aWxkVVJMLFxuICBnZXRDbGVhblVSTCxcbiAgcGFyc2VRdWVyeSxcbn0gZnJvbSAnQHZzc3VlL3V0aWxzJ1xuXG5pbXBvcnQge1xuICBub3JtYWxpemVVc2VyLFxuICBub3JtYWxpemVJc3N1ZSxcbiAgbm9ybWFsaXplQ29tbWVudCxcbiAgbWFwUmVhY3Rpb25OYW1lLFxufSBmcm9tICcuL3V0aWxzJ1xuXG4vKipcbiAqIEdpdGh1YiBBUEkgdjNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vYXBwcy9idWlsZGluZy1vYXV0aC1hcHBzL2F1dGhvcml6aW5nLW9hdXRoLWFwcHMvXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvaXNzdWVzL1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL2lzc3Vlcy9jb21tZW50cy9cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9yZWFjdGlvbnMvXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdpdGh1YlYzIGltcGxlbWVudHMgVnNzdWVBUEkuSW5zdGFuY2Uge1xuICBiYXNlVVJMOiBzdHJpbmdcbiAgb3duZXI6IHN0cmluZ1xuICByZXBvOiBzdHJpbmdcbiAgbGFiZWxzOiBzdHJpbmdcbiAgY2xpZW50SWQ6IHN0cmluZ1xuICBjbGllbnRTZWNyZXQ6IHN0cmluZ1xuICBzdGF0ZTogc3RyaW5nXG4gICRodHRwOiBBeGlvc0luc3RhbmNlXG5cbiAgY29uc3RydWN0b3IgKHtcbiAgICBiYXNlVVJMID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nLFxuICAgIG93bmVyLFxuICAgIHJlcG8sXG4gICAgbGFiZWxzLFxuICAgIGNsaWVudElkLFxuICAgIGNsaWVudFNlY3JldCxcbiAgICBzdGF0ZSxcbiAgfTogVnNzdWVBUElPcHRpb25zKSB7XG4gICAgdGhpcy5iYXNlVVJMID0gYmFzZVVSTFxuICAgIHRoaXMub3duZXIgPSBvd25lclxuICAgIHRoaXMucmVwbyA9IHJlcG9cbiAgICB0aGlzLmxhYmVscyA9IGxhYmVscy5qb2luKCcsJylcblxuICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZFxuICAgIHRoaXMuY2xpZW50U2VjcmV0ID0gY2xpZW50U2VjcmV0XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlXG5cbiAgICB0aGlzLiRodHRwID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uJyxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHRoaXMuJGh0dHAuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZS5kYXRhLmVycm9yX2Rlc2NyaXB0aW9uKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGxhdGZvcm0gYXBpIGluZm9cbiAgICovXG4gIGdldCBwbGF0Zm9ybSAoKTogVnNzdWVBUEkuUGxhdGZvcm0ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnR2l0SHViJyxcbiAgICAgIGxpbms6ICdodHRwczovL2dpdGh1Yi5jb20nLFxuICAgICAgdmVyc2lvbjogJ3YzJyxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgcmVhY3RhYmxlOiB0cnVlLFxuICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRpcmVjdCB0byB0aGUgYXV0aG9yaXphdGlvbiBwYWdlIG9mIHBsYXRmb3JtLlxuICAgKi9cbiAgcmVkaXJlY3RBdXRoICgpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGJ1aWxkVVJMKCdodHRwczovL2dpdGh1Yi5jb20vbG9naW4vb2F1dGgvYXV0aG9yaXplJywge1xuICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgcmVkaXJlY3RfdXJpOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIHNjb3BlOiAncHVibGljX3JlcG8nLFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYXV0aG9yaXphdGlvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgdGhlIGBjb2RlYCBhbmQgYHN0YXRlYCBleGlzdCBpbiB0aGUgcXVlcnksIGFuZCB0aGUgYHN0YXRlYCBtYXRjaGVzLCByZW1vdmUgdGhlbSBmcm9tIHF1ZXJ5LCBhbmQgdHJ5IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcmV0dXJuIEEgc3RyaW5nIGZvciBhY2Nlc3MgdG9rZW4sIGBudWxsYCBmb3Igbm8gYXV0aG9yaXphdGlvbiBjb2RlXG4gICAqL1xuICBhc3luYyBoYW5kbGVBdXRoICgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+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>;
}
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