@umbraco/headless-client
Version:
Node.js client library for the Umbraco Headless APIs
332 lines • 29.1 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MemberManagementClient = void 0;
var Endpoints_1 = require("../../Endpoints");
/**
* MemberManagementClient is used to access the Member part of the Content Management API.
* @public
*
* @example
* The {@link MemberManagementClient} must be accessed through {@link Client}.
*
* ```typescript
* import { Client } from '@umbraco/headless-client'
*
* const client = new Client({
* projectAlias: '<your-project-alias>',
* apiKey: '<your-api-key>',
* language: '<iso-code>',
* })
*
* const memberClient = client.management.member
* ```
*/
var MemberManagementClient = /** @class */ (function () {
/**
* @internal
*/
function MemberManagementClient(client) {
var _this = this;
this.client = client;
this.makeRequest = function (endpoint, data) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.client.makeRequest(endpoint, data)];
});
}); };
}
/**
* Find member by membername.
* @param username - Username for the member querying for.
* @returns a `Promise` that resolves to a {@link ContentManagementMember} if found, otherwise `undefined`.
*/
MemberManagementClient.prototype.byUsername = function (username) {
return __awaiter(this, void 0, void 0, function () {
var err_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.management.member.byUsername(username))];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_1 = _a.sent();
if (err_1.response && err_1.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_1;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Create a new member.
* @param data - Data for creating a new member.
* @returns a `Promise` that resolves to the newly created {@link ContentManagementMember}.
*/
MemberManagementClient.prototype.create = function (data) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.member.create(), data)];
});
});
};
/**
* Update member by username.
* @param username - Username for the member to be updated.
* @param data - Data for the member to be updated.
* @returns a `Promise` that resolves to a {@link ContentManagementMember} of the updated Member item if found, otherwise `undefined`.
*/
MemberManagementClient.prototype.update = function (username, data) {
return __awaiter(this, void 0, void 0, function () {
var err_2;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.management.member.update(username), data)];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_2 = _a.sent();
if (err_2.response && err_2.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_2;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Add member to group.
* @deprecated Use {@link MemberManagementClient.addToGroup | addToGroup()} instead.
* @param username - Username of the member.
* @param group - Name of the group the member should be added to.
*/
MemberManagementClient.prototype.addGroup = function (username, group) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.addToGroup(username, group)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
/**
* Add member to group.
* @param username - Username of the member.
* @param group - Name of the group the member should be added to.
*/
MemberManagementClient.prototype.addToGroup = function (username, groupName) {
return __awaiter(this, void 0, void 0, function () {
var err_3;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.management.member.addGroup(username, groupName))];
case 1:
_a.sent();
return [3 /*break*/, 3];
case 2:
err_3 = _a.sent();
if (err_3.response && err_3.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_3;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Remove member from group.
* @deprecated Use {@link MemberManagementClient.removeFromGroup | removeFromGroup()} instead.
* @param username - Username of the member.
* @param group - Name of the group the member should be removed from.
*/
MemberManagementClient.prototype.removeGroup = function (username, group) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.removeFromGroup(username, group)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
/**
* Remove member from group.
* @param username - Username of the member.
* @param group - Name of the group the member should be removed from.
*/
MemberManagementClient.prototype.removeFromGroup = function (username, groupName) {
return __awaiter(this, void 0, void 0, function () {
var err_4;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.management.member.removeGroup(username, groupName))];
case 1:
_a.sent();
return [3 /*break*/, 3];
case 2:
err_4 = _a.sent();
if (err_4.response && err_4.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_4;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Delete a member.
* @param username - Username for the member that needs to be deleted.
*/
MemberManagementClient.prototype.delete = function (username) {
return __awaiter(this, void 0, void 0, function () {
var err_5;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.management.member.delete(username))];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_5 = _a.sent();
if (err_5.response && err_5.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_5;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Change a members password.
* @param username - Username for the member.
* @param currentPassword - The current password.
* @param newPassword - The new password.
* @returns a `Promise` that resolves to a {@link ContentManagementMember} if found and password is updated, otherwise `undefined`.
*/
MemberManagementClient.prototype.changePassword = function (username, currentPassword, newPassword) {
return __awaiter(this, void 0, void 0, function () {
var err_6;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.management.member.changePassword(username), { currentPassword: currentPassword, newPassword: newPassword })];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_6 = _a.sent();
if (err_6.response && err_6.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_6;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Create a reset tokon that can be used to reset the members password.
* @param username - Username for the member.
* @returns a `Promise` that resolves to a {@link MemberResetPasswordToken} if found, otherwise `undefined`.
*/
MemberManagementClient.prototype.createResetPasswordToken = function (username) {
return __awaiter(this, void 0, void 0, function () {
var err_7;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.management.member.createResetPasswordToken(username))];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_7 = _a.sent();
if (err_7.response && err_7.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_7;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Resets the members password using a reset token obtained via. {@link MemberManagementClient.createResetPasswordToken | createResetPasswordToken()}.
* @param username - Username for the member.
* @param token - The password reset token.
* @param newPassword - The new password.
* @returns a `Promise` that resolves to a {@link ContentManagementMember} if found and password is updated, otherwise `undefined`.
*/
MemberManagementClient.prototype.resetPassword = function (username, token, newPassword) {
return __awaiter(this, void 0, void 0, function () {
var err_8;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.management.member.resetPassword(username), { token: token, newPassword: newPassword })];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_8 = _a.sent();
if (err_8.response && err_8.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_8;
case 3: return [2 /*return*/];
}
});
});
};
return MemberManagementClient;
}());
exports.MemberManagementClient = MemberManagementClient;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtYmVyTWFuYWdlbWVudENsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9DbGllbnRzL01hbmFnZW1lbnQvTWVtYmVyTWFuYWdlbWVudENsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLQSw2Q0FBMkM7QUFFM0M7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNIO0lBQ0U7O09BRUc7SUFDSCxnQ0FDbUIsTUFBYztRQURqQyxpQkFHQztRQUZrQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBSWhCLGdCQUFXLEdBQUcsVUFBVSxRQUFxQixFQUFFLElBQVU7O2dCQUN4RSxzQkFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUE7O2FBQy9DLENBQUE7SUFKRCxDQUFDO0lBTUQ7Ozs7T0FJRztJQUNHLDJDQUFVLEdBQWhCLFVBQXFELFFBQWdCOzs7Ozs7O3dCQUUxRCxxQkFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUksUUFBUSxDQUFDLENBQUMsRUFBQTs0QkFBbEYsc0JBQU8sU0FBMkUsRUFBQTs7O3dCQUVsRixJQUFJLEtBQUcsQ0FBQyxRQUFRLElBQUksS0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFOzRCQUMvQyxzQkFBTyxTQUFTLEVBQUE7eUJBQ2pCO3dCQUNELE1BQU0sS0FBRyxDQUFBOzs7OztLQUVaO0lBRUQ7Ozs7T0FJRztJQUNHLHVDQUFNLEdBQVosVUFBaUQsSUFBK0M7OztnQkFDOUYsc0JBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUE7OztLQUN2RTtJQUVEOzs7OztPQUtHO0lBQ0csdUNBQU0sR0FBWixVQUFpRCxRQUFnQixFQUFFLElBQStDOzs7Ozs7O3dCQUV2RyxxQkFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUE7NEJBQXBGLHNCQUFPLFNBQTZFLEVBQUE7Ozt3QkFFcEYsSUFBSSxLQUFHLENBQUMsUUFBUSxJQUFJLEtBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDL0Msc0JBQU8sU0FBUyxFQUFBO3lCQUNqQjt3QkFDRCxNQUFNLEtBQUcsQ0FBQTs7Ozs7S0FFWjtJQUVEOzs7OztPQUtHO0lBQ0cseUNBQVEsR0FBZCxVQUFnQixRQUFnQixFQUFFLEtBQWE7Ozs7NEJBQzdDLHFCQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFBOzt3QkFBdEMsU0FBc0MsQ0FBQTs7Ozs7S0FDdkM7SUFFRDs7OztPQUlHO0lBQ0csMkNBQVUsR0FBaEIsVUFBa0IsUUFBZ0IsRUFBRSxTQUFpQjs7Ozs7Ozt3QkFFakQscUJBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFBOzt3QkFBakYsU0FBaUYsQ0FBQTs7Ozt3QkFFakYsSUFBSSxLQUFHLENBQUMsUUFBUSxJQUFJLEtBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDL0Msc0JBQU8sU0FBUyxFQUFBO3lCQUNqQjt3QkFDRCxNQUFNLEtBQUcsQ0FBQTs7Ozs7S0FFWjtJQUVEOzs7OztPQUtHO0lBQ0csNENBQVcsR0FBakIsVUFBbUIsUUFBZ0IsRUFBRSxLQUFhOzs7OzRCQUNoRCxxQkFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBQTs7d0JBQTNDLFNBQTJDLENBQUE7Ozs7O0tBQzVDO0lBRUQ7Ozs7T0FJRztJQUNHLGdEQUFlLEdBQXJCLFVBQXVCLFFBQWdCLEVBQUUsU0FBaUI7Ozs7Ozs7d0JBRXRELHFCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBQTs7d0JBQXBGLFNBQW9GLENBQUE7Ozs7d0JBRXBGLElBQUksS0FBRyxDQUFDLFFBQVEsSUFBSSxLQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7NEJBQy9DLHNCQUFPLFNBQVMsRUFBQTt5QkFDakI7d0JBQ0QsTUFBTSxLQUFHLENBQUE7Ozs7O0tBRVo7SUFFRDs7O09BR0c7SUFDRyx1Q0FBTSxHQUFaLFVBQWMsUUFBZ0I7Ozs7Ozs7d0JBRW5CLHFCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFBOzRCQUEzRSxzQkFBTyxTQUFvRSxFQUFBOzs7d0JBRTNFLElBQUksS0FBRyxDQUFDLFFBQVEsSUFBSSxLQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7NEJBQy9DLHNCQUFPLFNBQVMsRUFBQTt5QkFDakI7d0JBQ0QsTUFBTSxLQUFHLENBQUE7Ozs7O0tBRVo7SUFFRDs7Ozs7O09BTUc7SUFDRywrQ0FBYyxHQUFwQixVQUFzQixRQUFnQixFQUFFLGVBQXVCLEVBQUUsV0FBbUI7Ozs7Ozs7d0JBRXpFLHFCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLGVBQWUsaUJBQUEsRUFBRSxXQUFXLGFBQUEsRUFBRSxDQUFDLEVBQUE7NEJBQXJILHNCQUFPLFNBQThHLEVBQUE7Ozt3QkFFckgsSUFBSSxLQUFHLENBQUMsUUFBUSxJQUFJLEtBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDL0Msc0JBQU8sU0FBUyxFQUFBO3lCQUNqQjt3QkFDRCxNQUFNLEtBQUcsQ0FBQTs7Ozs7S0FFWjtJQUVEOzs7O09BSUc7SUFDRyx5REFBd0IsR0FBOUIsVUFBb0UsUUFBZ0I7Ozs7Ozs7d0JBRXpFLHFCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUE7NEJBQWhHLHNCQUFPLFNBQXlGLEVBQUE7Ozt3QkFFaEcsSUFBSSxLQUFHLENBQUMsUUFBUSxJQUFJLEtBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDL0Msc0JBQU8sU0FBUyxFQUFBO3lCQUNqQjt3QkFDRCxNQUFNLEtBQUcsQ0FBQTs7Ozs7S0FFWjtJQUVEOzs7Ozs7T0FNRztJQUNHLDhDQUFhLEdBQW5CLFVBQXdELFFBQWdCLEVBQUUsS0FBYSxFQUFFLFdBQW1COzs7Ozs7O3dCQUVqRyxxQkFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUksUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLE9BQUEsRUFBRSxXQUFXLGFBQUEsRUFBRSxDQUFDLEVBQUE7NEJBQTdHLHNCQUFPLFNBQXNHLEVBQUE7Ozt3QkFFN0csSUFBSSxLQUFHLENBQUMsUUFBUSxJQUFJLEtBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDL0Msc0JBQU8sU0FBUyxFQUFBO3lCQUNqQjt3QkFDRCxNQUFNLEtBQUcsQ0FBQTs7Ozs7S0FFWjtJQUNILDZCQUFDO0FBQUQsQ0FBQyxBQTdLRCxJQTZLQztBQTdLWSx3REFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJ1xuXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tICcuLi8uLi9DbGllbnQnXG5pbXBvcnQgeyBDb250ZW50TWFuYWdlbWVudE1lbWJlciwgQ29udGVudE1hbmFnZW1lbnRNZW1iZXJSZXF1ZXN0LCBNZW1iZXJSZXNldFBhc3N3b3JkVG9rZW4gfSBmcm9tICcuLi8uLi9SZXNwb25zZXMnXG5pbXBvcnQgeyBFbmRwb2ludCB9IGZyb20gJy4uLy4uL0VuZHBvaW50J1xuaW1wb3J0IHsgRW5kcG9pbnRzIH0gZnJvbSAnLi4vLi4vRW5kcG9pbnRzJ1xuXG4vKipcbiAqIE1lbWJlck1hbmFnZW1lbnRDbGllbnQgaXMgdXNlZCB0byBhY2Nlc3MgdGhlIE1lbWJlciBwYXJ0IG9mIHRoZSBDb250ZW50IE1hbmFnZW1lbnQgQVBJLlxuICogQHB1YmxpY1xuICpcbiAqIEBleGFtcGxlXG4gKiBUaGUge0BsaW5rIE1lbWJlck1hbmFnZW1lbnRDbGllbnR9IG11c3QgYmUgYWNjZXNzZWQgdGhyb3VnaCB7QGxpbmsgQ2xpZW50fS5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBDbGllbnQgfSBmcm9tICdAdW1icmFjby9oZWFkbGVzcy1jbGllbnQnXG4gKlxuICogY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCh7XG4gKiAgcHJvamVjdEFsaWFzOiAnPHlvdXItcHJvamVjdC1hbGlhcz4nLFxuICogIGFwaUtleTogJzx5b3VyLWFwaS1rZXk+JyxcbiAqICBsYW5ndWFnZTogJzxpc28tY29kZT4nLFxuICogfSlcbiAqXG4gKiBjb25zdCBtZW1iZXJDbGllbnQgPSBjbGllbnQubWFuYWdlbWVudC5tZW1iZXJcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTWVtYmVyTWFuYWdlbWVudENsaWVudCB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yIChcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50XG4gICkge1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtYWtlUmVxdWVzdCA9IGFzeW5jIDxUPihlbmRwb2ludDogRW5kcG9pbnQ8VD4sIGRhdGE/OiBhbnkpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQubWFrZVJlcXVlc3QoZW5kcG9pbnQsIGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogRmluZCBtZW1iZXIgYnkgbWVtYmVybmFtZS5cbiAgICogQHBhcmFtIHVzZXJuYW1lIC0gVXNlcm5hbWUgZm9yIHRoZSBtZW1iZXIgcXVlcnlpbmcgZm9yLlxuICAgKiBAcmV0dXJucyBhIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIENvbnRlbnRNYW5hZ2VtZW50TWVtYmVyfSBpZiBmb3VuZCwgb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxuICAgKi9cbiAgYXN5bmMgYnlVc2VybmFtZTxSIGV4dGVuZHMgQ29udGVudE1hbmFnZW1lbnRNZW1iZXI+ICh1c2VybmFtZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5tYW5hZ2VtZW50Lm1lbWJlci5ieVVzZXJuYW1lPFI+KHVzZXJuYW1lKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIucmVzcG9uc2UgJiYgZXJyLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbWVtYmVyLlxuICAgKiBAcGFyYW0gZGF0YSAtIERhdGEgZm9yIGNyZWF0aW5nIGEgbmV3IG1lbWJlci5cbiAgICogQHJldHVybnMgYSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byB0aGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgQ29udGVudE1hbmFnZW1lbnRNZW1iZXJ9LlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlPFIgZXh0ZW5kcyBDb250ZW50TWFuYWdlbWVudE1lbWJlcj4gKGRhdGE6IENvbnRlbnRNYW5hZ2VtZW50TWVtYmVyUmVxdWVzdCB8IEZvcm1EYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyLmNyZWF0ZTxSPigpLCBkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBtZW1iZXIgYnkgdXNlcm5hbWUuXG4gICAqIEBwYXJhbSB1c2VybmFtZSAtIFVzZXJuYW1lIGZvciB0aGUgbWVtYmVyIHRvIGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0YSBmb3IgdGhlIG1lbWJlciB0byBiZSB1cGRhdGVkLlxuICAgKiBAcmV0dXJucyBhIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIENvbnRlbnRNYW5hZ2VtZW50TWVtYmVyfSBvZiB0aGUgdXBkYXRlZCBNZW1iZXIgaXRlbSBpZiBmb3VuZCwgb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlPFIgZXh0ZW5kcyBDb250ZW50TWFuYWdlbWVudE1lbWJlcj4gKHVzZXJuYW1lOiBzdHJpbmcsIGRhdGE6IENvbnRlbnRNYW5hZ2VtZW50TWVtYmVyUmVxdWVzdCB8IEZvcm1EYXRhKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5tYW5hZ2VtZW50Lm1lbWJlci51cGRhdGU8Uj4odXNlcm5hbWUpLCBkYXRhKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBtZW1iZXIgdG8gZ3JvdXAuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgTWVtYmVyTWFuYWdlbWVudENsaWVudC5hZGRUb0dyb3VwIHwgYWRkVG9Hcm91cCgpfSBpbnN0ZWFkLlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSBvZiB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0gZ3JvdXAgLSBOYW1lIG9mIHRoZSBncm91cCB0aGUgbWVtYmVyIHNob3VsZCBiZSBhZGRlZCB0by5cbiAgICovXG4gIGFzeW5jIGFkZEdyb3VwICh1c2VybmFtZTogc3RyaW5nLCBncm91cDogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5hZGRUb0dyb3VwKHVzZXJuYW1lLCBncm91cClcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbWVtYmVyIHRvIGdyb3VwLlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSBvZiB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0gZ3JvdXAgLSBOYW1lIG9mIHRoZSBncm91cCB0aGUgbWVtYmVyIHNob3VsZCBiZSBhZGRlZCB0by5cbiAgICovXG4gIGFzeW5jIGFkZFRvR3JvdXAgKHVzZXJuYW1lOiBzdHJpbmcsIGdyb3VwTmFtZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyLmFkZEdyb3VwKHVzZXJuYW1lLCBncm91cE5hbWUpKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBtZW1iZXIgZnJvbSBncm91cC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBNZW1iZXJNYW5hZ2VtZW50Q2xpZW50LnJlbW92ZUZyb21Hcm91cCB8IHJlbW92ZUZyb21Hcm91cCgpfSBpbnN0ZWFkLlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSBvZiB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0gZ3JvdXAgLSBOYW1lIG9mIHRoZSBncm91cCB0aGUgbWVtYmVyIHNob3VsZCBiZSByZW1vdmVkIGZyb20uXG4gICAqL1xuICBhc3luYyByZW1vdmVHcm91cCAodXNlcm5hbWU6IHN0cmluZywgZ3JvdXA6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMucmVtb3ZlRnJvbUdyb3VwKHVzZXJuYW1lLCBncm91cClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgbWVtYmVyIGZyb20gZ3JvdXAuXG4gICAqIEBwYXJhbSB1c2VybmFtZSAtIFVzZXJuYW1lIG9mIHRoZSBtZW1iZXIuXG4gICAqIEBwYXJhbSBncm91cCAtIE5hbWUgb2YgdGhlIGdyb3VwIHRoZSBtZW1iZXIgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZUZyb21Hcm91cCAodXNlcm5hbWU6IHN0cmluZywgZ3JvdXBOYW1lOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5tZW1iZXIucmVtb3ZlR3JvdXAodXNlcm5hbWUsIGdyb3VwTmFtZSkpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgbWVtYmVyLlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSBmb3IgdGhlIG1lbWJlciB0aGF0IG5lZWRzIHRvIGJlIGRlbGV0ZWQuXG4gICAqL1xuICBhc3luYyBkZWxldGUgKHVzZXJuYW1lOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyLmRlbGV0ZSh1c2VybmFtZSkpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIGEgbWVtYmVycyBwYXNzd29yZC5cbiAgICogQHBhcmFtIHVzZXJuYW1lIC0gVXNlcm5hbWUgZm9yIHRoZSBtZW1iZXIuXG4gICAqIEBwYXJhbSBjdXJyZW50UGFzc3dvcmQgLSBUaGUgY3VycmVudCBwYXNzd29yZC5cbiAgICogQHBhcmFtIG5ld1Bhc3N3b3JkIC0gVGhlIG5ldyBwYXNzd29yZC5cbiAgICogQHJldHVybnMgYSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byBhIHtAbGluayBDb250ZW50TWFuYWdlbWVudE1lbWJlcn0gaWYgZm91bmQgYW5kIHBhc3N3b3JkIGlzIHVwZGF0ZWQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAgICovXG4gIGFzeW5jIGNoYW5nZVBhc3N3b3JkICh1c2VybmFtZTogc3RyaW5nLCBjdXJyZW50UGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5tZW1iZXIuY2hhbmdlUGFzc3dvcmQodXNlcm5hbWUpLCB7IGN1cnJlbnRQYXNzd29yZCwgbmV3UGFzc3dvcmQgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIucmVzcG9uc2UgJiYgZXJyLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByZXNldCB0b2tvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlc2V0IHRoZSBtZW1iZXJzIHBhc3N3b3JkLlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSBmb3IgdGhlIG1lbWJlci5cbiAgICogQHJldHVybnMgYSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byBhIHtAbGluayBNZW1iZXJSZXNldFBhc3N3b3JkVG9rZW59IGlmIGZvdW5kLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBhc3luYyBjcmVhdGVSZXNldFBhc3N3b3JkVG9rZW48UiBleHRlbmRzIE1lbWJlclJlc2V0UGFzc3dvcmRUb2tlbj4gKHVzZXJuYW1lOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyLmNyZWF0ZVJlc2V0UGFzc3dvcmRUb2tlbjxSPih1c2VybmFtZSkpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBtZW1iZXJzIHBhc3N3b3JkIHVzaW5nIGEgcmVzZXQgdG9rZW4gb2J0YWluZWQgdmlhLiB7QGxpbmsgTWVtYmVyTWFuYWdlbWVudENsaWVudC5jcmVhdGVSZXNldFBhc3N3b3JkVG9rZW4gfCBjcmVhdGVSZXNldFBhc3N3b3JkVG9rZW4oKX0uXG4gICAqIEBwYXJhbSB1c2VybmFtZSAtIFVzZXJuYW1lIGZvciB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgcGFzc3dvcmQgcmVzZXQgdG9rZW4uXG4gICAqIEBwYXJhbSBuZXdQYXNzd29yZCAtIFRoZSBuZXcgcGFzc3dvcmQuXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgQ29udGVudE1hbmFnZW1lbnRNZW1iZXJ9IGlmIGZvdW5kIGFuZCBwYXNzd29yZCBpcyB1cGRhdGVkLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBhc3luYyByZXNldFBhc3N3b3JkPFIgZXh0ZW5kcyBDb250ZW50TWFuYWdlbWVudE1lbWJlcj4gKHVzZXJuYW1lOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyLnJlc2V0UGFzc3dvcmQ8Uj4odXNlcm5hbWUpLCB7IHRva2VuLCBuZXdQYXNzd29yZCB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG4iXX0=