UNPKG

@umbraco/headless-client

Version:
332 lines 29.1 kB
"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtYmVyTWFuYWdlbWVudENsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9DbGllbnRzL01hbmFnZW1lbnQvTWVtYmVyTWFuYWdlbWVudENsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLQSw2Q0FBMkM7QUFFM0M7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNIO0lBQ0U7O09BRUc7SUFDSCxnQ0FDbUIsTUFBYztRQURqQyxpQkFHQztRQUZrQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBSWhCLGdCQUFXLEdBQUcsVUFBVSxRQUFxQixFQUFFLElBQVU7O2dCQUN4RSxzQkFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUE7O2FBQy9DLENBQUE7SUFKRCxDQUFDO0lBTUQ7Ozs7T0FJRztJQUNHLDJDQUFVLEdBQWhCLFVBQXFELFFBQWdCOzs7Ozs7O3dCQUUxRCxxQkFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUksUUFBUSxDQUFDLENBQUMsRUFBQTs0QkFBbEYsc0JBQU8sU0FBMkUsRUFBQTs7O3dCQUVsRixJQUFJLEtBQUcsQ0FBQyxRQUFRLElBQUksS0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFOzRCQUMvQyxzQkFBTyxTQUFTLEVBQUE7eUJBQ2pCO3dCQUNELE1BQU0sS0FBRyxDQUFBOzs7OztLQUVaO0lBRUQ7Ozs7T0FJRztJQUNHLHVDQUFNLEdBQVosVUFBaUQsSUFBK0M7OztnQkFDOUYsc0JBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUE7OztLQUN2RTtJQUVEOzs7OztPQUtHO0lB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LENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDL0Msc0JBQU8sU0FBUyxFQUFBO3lCQUNqQjt3QkFDRCxNQUFNLEtBQUcsQ0FBQTs7Ozs7S0FFWjtJQUVEOzs7O09BSUc7SUFDRyx5REFBd0IsR0FBOUIsVUFBb0UsUUFBZ0I7Ozs7Ozs7d0JBRXpFLHFCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUE7NEJBQWhHLHNCQUFPLFNBQXlGLEVBQUE7Ozt3QkFFaEcsSUFBSSxLQUFHLENBQUMsUUFBUSxJQUFJLEtBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDL0Msc0JBQU8sU0FBUyxFQUFBO3lCQUNqQjt3QkFDRCxNQUFNLEtBQUcsQ0FBQTs7Ozs7S0FFWjtJQUVEOzs7Ozs7T0FNRztJQUNHLDhDQUFhLEdBQW5CLFVBQXdELFFBQWdCLEVBQUUsS0FBYSxFQUFFLFdBQW1COzs7Ozs7O3dCQUVqRyxxQkFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUksUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLE9BQUEsRUFBRSxXQUFXLGFBQUEsRUFBRSxDQUFDLEVBQUE7NEJBQTdHLHNCQUFPLFNBQXNHLEVBQUE7Ozt3QkFFN0csSUFBSSxLQUFHLENBQUMsUUFBUSxJQUFJLEtBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDL0Msc0JBQU8sU0FBUyxFQUFBO3lCQUNqQjt3QkFDRCxNQUFNLEtBQUcsQ0FBQTs7Ozs7S0FFWjtJQUNILDZCQUFDO0FBQUQsQ0FBQyxBQTdLRCxJQTZLQztBQTdLWSx3REFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJ1xuXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tICcuLi8uLi9DbGllbnQnXG5pbXBvcnQgeyBDb250ZW50TWFuYWdlbWVudE1lbWJlciwgQ29udGVudE1hbmFnZW1lbnRNZW1iZXJSZXF1ZXN0LCBNZW1iZXJSZXNldFBhc3N3b3JkVG9rZW4gfSBmcm9tICcuLi8uLi9SZXNwb25zZXMnXG5pbXBvcnQgeyBFbmRwb2ludCB9IGZyb20gJy4uLy4uL0VuZHBvaW50J1xuaW1wb3J0IHsgRW5kcG9pbnRzIH0gZnJvbSAnLi4vLi4vRW5kcG9pbnRzJ1xuXG4vKipcbiAqIE1lbWJlck1hbmFnZW1lbnRDbGllbnQgaXMgdXNlZCB0byBhY2Nlc3MgdGhlIE1lbWJlciBwYXJ0IG9mIHRoZSBDb250ZW50IE1hbmFnZW1lbnQgQVBJLlxuICogQHB1YmxpY1xuICpcbiAqIEBleGFtcGxlXG4gKiBUaGUge0BsaW5rIE1lbWJlck1hbmFnZW1lbnRDbGllbnR9IG11c3QgYmUgYWNjZXNzZWQgdGhyb3VnaCB7QGxpbmsgQ2xpZW50fS5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBDbGllbnQgfSBmcm9tICdAdW1icmFjby9oZWFkbGVzcy1jbGllbnQnXG4gKlxuICogY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCh7XG4gKiAgcHJvamVjdEFsaWFzOiAnPHlvdXItcHJvamVjdC1hbGlhcz4nLFxuICogIGFwaUtleTogJzx5b3VyLWFwaS1rZXk+JyxcbiAqICBsYW5ndWFnZTogJzxpc28tY29kZT4nLFxuICogfSlcbiAqXG4gKiBjb25zdCBtZW1iZXJDbGllbnQgPSBjbGllbnQubWFuYWdlbWVudC5tZW1iZXJcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTWVtYmVyTWFuYWdlbWVudENsaWVudCB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yIChcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50XG4gICkge1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtYWtlUmVxdWVzdCA9IGFzeW5jIDxUPihlbmRwb2ludDogRW5kcG9pbnQ8VD4sIGRhdGE/OiBhbnkpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQubWFrZVJlcXVlc3QoZW5kcG9pbnQsIGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogRmluZCBtZW1iZXIgYnkgbWVtYmVybmFtZS5cbiAgICogQHBhcmFtIHVzZXJuYW1lIC0gVXNlcm5hbWUgZm9yIHRoZSBtZW1iZXIgcXVlcnlpbmcgZm9yLlxuICAgKiBAcmV0dXJucyBhIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIENvbnRlbnRNYW5hZ2VtZW50TWVtYmVyfSBpZiBmb3VuZCwgb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxuICAgKi9cbiAgYXN5bmMgYnlVc2VybmFtZTxSIGV4dGVuZHMgQ29udGVudE1hbmFnZW1lbnRNZW1iZXI+ICh1c2VybmFtZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5tYW5hZ2VtZW50Lm1lbWJlci5ieVVzZXJuYW1lPFI+KHVzZXJuYW1lKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIucmVzcG9uc2UgJiYgZXJyLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbWVtYmVyLlxuICAgKiBAcGFyYW0gZGF0YSAtIERhdGEgZm9yIGNyZWF0aW5nIGEgbmV3IG1lbWJlci5cbiAgICogQHJldHVybnMgYSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byB0aGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgQ29udGVudE1hbmFnZW1lbnRNZW1iZXJ9LlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlPFIgZXh0ZW5kcyBDb250ZW50TWFuYWdlbWVudE1lbWJlcj4gKGRhdGE6IENvbnRlbnRNYW5hZ2VtZW50TWVtYmVyUmVxdWVzdCB8IEZvcm1EYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyLmNyZWF0ZTxSPigpLCBkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBtZW1iZXIgYnkgdXNlcm5hbWUuXG4gICAqIEBwYXJhbSB1c2VybmFtZSAtIFVzZXJuYW1lIGZvciB0aGUgbWVtYmVyIHRvIGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0YSBmb3IgdGhlIG1lbWJlciB0byBiZSB1cGRhdGVkLlxuICAgKiBAcmV0dXJucyBhIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIENvbnRlbnRNYW5hZ2VtZW50TWVtYmVyfSBvZiB0aGUgdXBkYXRlZCBNZW1iZXIgaXRlbSBpZiBmb3VuZCwgb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlPFIgZXh0ZW5kcyBDb250ZW50TWFuYWdlbWVudE1lbWJlcj4gKHVzZXJuYW1lOiBzdHJpbmcsIGRhdGE6IENvbnRlbnRNYW5hZ2VtZW50TWVtYmVyUmVxdWVzdCB8IEZvcm1EYXRhKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5tYW5hZ2VtZW50Lm1lbWJlci51cGRhdGU8Uj4odXNlcm5hbWUpLCBkYXRhKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBtZW1iZXIgdG8gZ3JvdXAuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgTWVtYmVyTWFuYWdlbWVudENsaWVudC5hZGRUb0dyb3VwIHwgYWRkVG9Hcm91cCgpfSBpbnN0ZWFkLlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSBvZiB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0gZ3JvdXAgLSBOYW1lIG9mIHRoZSBncm91cCB0aGUgbWVtYmVyIHNob3VsZCBiZSBhZGRlZCB0by5cbiAgICovXG4gIGFzeW5jIGFkZEdyb3VwICh1c2VybmFtZTogc3RyaW5nLCBncm91cDogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5hZGRUb0dyb3VwKHVzZXJuYW1lLCBncm91cClcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbWVtYmVyIHRvIGdyb3VwLlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSBvZiB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0gZ3JvdXAgLSBOYW1lIG9mIHRoZSBncm91cCB0aGUgbWVtYmVyIHNob3VsZCBiZSBhZGRlZCB0by5cbiAgICovXG4gIGFzeW5jIGFkZFRvR3JvdXAgKHVzZXJuYW1lOiBzdHJpbmcsIGdyb3VwTmFtZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyLmFkZEdyb3VwKHVzZXJuYW1lLCBncm91cE5hbWUpKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBtZW1iZXIgZnJvbSBncm91cC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBNZW1iZXJNYW5hZ2VtZW50Q2xpZW50LnJlbW92ZUZyb21Hcm91cCB8IHJlbW92ZUZyb21Hcm91cCgpfSBpbnN0ZWFkLlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSBvZiB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0gZ3JvdXAgLSBOYW1lIG9mIHRoZSBncm91cCB0aGUgbWVtYmVyIHNob3VsZCBiZSByZW1vdmVkIGZyb20uXG4gICAqL1xuICBhc3luYyByZW1vdmVHcm91cCAodXNlcm5hbWU6IHN0cmluZywgZ3JvdXA6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMucmVtb3ZlRnJvbUdyb3VwKHVzZXJuYW1lLCBncm91cClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgbWVtYmVyIGZyb20gZ3JvdXAuXG4gICAqIEBwYXJhbSB1c2VybmFtZSAtIFVzZXJuYW1lIG9mIHRoZSBtZW1iZXIuXG4gICAqIEBwYXJhbSBncm91cCAtIE5hbWUgb2YgdGhlIGdyb3VwIHRoZSBtZW1iZXIgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZUZyb21Hcm91cCAodXNlcm5hbWU6IHN0cmluZywgZ3JvdXBOYW1lOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5tZW1iZXIucmVtb3ZlR3JvdXAodXNlcm5hbWUsIGdyb3VwTmFtZSkpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgbWVtYmVyLlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSBmb3IgdGhlIG1lbWJlciB0aGF0IG5lZWRzIHRvIGJlIGRlbGV0ZWQuXG4gICAqL1xuICBhc3luYyBkZWxldGUgKHVzZXJuYW1lOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyLmRlbGV0ZSh1c2VybmFtZSkpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIGEgbWVtYmVycyBwYXNzd29yZC5cbiAgICogQHBhcmFtIHVzZXJuYW1lIC0gVXNlcm5hbWUgZm9yIHRoZSBtZW1iZXIuXG4gICAqIEBwYXJhbSBjdXJyZW50UGFzc3dvcmQgLSBUaGUgY3VycmVudCBwYXNzd29yZC5cbiAgICogQHBhcmFtIG5ld1Bhc3N3b3JkIC0gVGhlIG5ldyBwYXNzd29yZC5cbiAgICogQHJldHVybnMgYSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byBhIHtAbGluayBDb250ZW50TWFuYWdlbWVudE1lbWJlcn0gaWYgZm91bmQgYW5kIHBhc3N3b3JkIGlzIHVwZGF0ZWQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAgICovXG4gIGFzeW5jIGNoYW5nZVBhc3N3b3JkICh1c2VybmFtZTogc3RyaW5nLCBjdXJyZW50UGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5tZW1iZXIuY2hhbmdlUGFzc3dvcmQodXNlcm5hbWUpLCB7IGN1cnJlbnRQYXNzd29yZCwgbmV3UGFzc3dvcmQgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIucmVzcG9uc2UgJiYgZXJyLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByZXNldCB0b2tvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlc2V0IHRoZSBtZW1iZXJzIHBhc3N3b3JkLlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSBmb3IgdGhlIG1lbWJlci5cbiAgICogQHJldHVybnMgYSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byBhIHtAbGluayBNZW1iZXJSZXNldFBhc3N3b3JkVG9rZW59IGlmIGZvdW5kLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBhc3luYyBjcmVhdGVSZXNldFBhc3N3b3JkVG9rZW48UiBleHRlbmRzIE1lbWJlclJlc2V0UGFzc3dvcmRUb2tlbj4gKHVzZXJuYW1lOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyLmNyZWF0ZVJlc2V0UGFzc3dvcmRUb2tlbjxSPih1c2VybmFtZSkpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBtZW1iZXJzIHBhc3N3b3JkIHVzaW5nIGEgcmVzZXQgdG9rZW4gb2J0YWluZWQgdmlhLiB7QGxpbmsgTWVtYmVyTWFuYWdlbWVudENsaWVudC5jcmVhdGVSZXNldFBhc3N3b3JkVG9rZW4gfCBjcmVhdGVSZXNldFBhc3N3b3JkVG9rZW4oKX0uXG4gICAqIEBwYXJhbSB1c2VybmFtZSAtIFVzZXJuYW1lIGZvciB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgcGFzc3dvcmQgcmVzZXQgdG9rZW4uXG4gICAqIEBwYXJhbSBuZXdQYXNzd29yZCAtIFRoZSBuZXcgcGFzc3dvcmQuXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgQ29udGVudE1hbmFnZW1lbnRNZW1iZXJ9IGlmIGZvdW5kIGFuZCBwYXNzd29yZCBpcyB1cGRhdGVkLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBhc3luYyByZXNldFBhc3N3b3JkPFIgZXh0ZW5kcyBDb250ZW50TWFuYWdlbWVudE1lbWJlcj4gKHVzZXJuYW1lOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyLnJlc2V0UGFzc3dvcmQ8Uj4odXNlcm5hbWUpLCB7IHRva2VuLCBuZXdQYXNzd29yZCB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG4iXX0=