UNPKG

@umbraco/headless-client

Version:
352 lines 33.5 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.ManagementClient = void 0; var ContentManagementClient_1 = require("./ContentManagementClient"); var MediaManagementClient_1 = require("./MediaManagementClient"); var MemberManagementClient_1 = require("./MemberManagementClient"); var Endpoints_1 = require("../../Endpoints"); /** * ManagementClient is used to access the Content Management API. * @public * * @example * The {@link ManagementClient} 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 managementClient = client.management * ``` */ var ManagementClient = /** @class */ (function () { /** * @internal */ function ManagementClient(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)]; }); }); }; /** * The Content client for the Content Management API. * See {@link ContentManagementClient} */ this.content = new ContentManagementClient_1.ContentManagementClient(this.client); /** * The Media client for the Media Management API. * See {@link MediaManagementClient} */ this.media = new MediaManagementClient_1.MediaManagementClient(this.client); /** * The Member client for the Member Management API. * See {@link MemberManagementClient} */ this.member = new MemberManagementClient_1.MemberManagementClient(this.client); } Object.defineProperty(ManagementClient.prototype, "contentType", { /** * ContentType API */ get: function () { var _this = this; return { /** * Fetch all content types */ all: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.contentType.all())]; }); }); }, /** * Find content type by alias * @param alias Alias for the content type */ byAlias: function (alias) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.contentType.byAlias(alias))]; }); }); } }; }, enumerable: false, configurable: true }); Object.defineProperty(ManagementClient.prototype, "mediaType", { /** * Media API */ get: function () { var _this = this; return { /** * Fetch all media types */ all: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.mediaType.all())]; }); }); }, /** * Find media type by alias * @param alias Alias of the media type querying for */ byAlias: function (alias) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.mediaType.byAlias(alias))]; }); }); } }; }, enumerable: false, configurable: true }); Object.defineProperty(ManagementClient.prototype, "language", { /** * Language API */ get: function () { var _this = this; return { /** * Fetch all languages */ all: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.language.all())]; }); }); }, /** * Find language by ISO code * @param id ISO Code for the language (e.g. en-US) */ byISOCode: function (id) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.language.byISOCode(id))]; }); }); }, /** * Create a language * @param data Data for creating language object */ 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.language.create(), data)]; }); }); }, /** * Update a language * @param id ISO Code for the language (e.g. en-US) * @param data Data for updating language object */ update: function (id, data) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.language.update(id), data)]; }); }); }, /** * Delete a language * @param id ISO Code for the language (e.g. en-US) */ delete: function (id) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.language.delete(id))]; }); }); } }; }, enumerable: false, configurable: true }); Object.defineProperty(ManagementClient.prototype, "relation", { /** * Relation API */ get: function () { var _this = this; return { /** * Find relation by id * @param id GUID part of an Umbraco UDI */ byId: function (id) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.relation.byId(id))]; }); }); }, /** * Find relation by alias * @param alias Alias of the relation querying for */ byAlias: function (alias) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.relation.byAlias(alias))]; }); }); }, /** * Fetch child for relation with id * @param id GUID part of an Umbraco UDI */ byChild: function (id) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.relation.byChild(id))]; }); }); }, /** * Fetch parent for relation with id * @param id GUID part of an Umbraco UDI */ byParent: function (id) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.relation.byParent(id))]; }); }); }, /** * Create a relation * @param data Data for creating relation object */ 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.relation.create(), data)]; }); }); }, /** * Delete relation with id * @param id GUID part of an Umbraco UDI */ delete: function (id) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.relation.delete(id))]; }); }); } }; }, enumerable: false, configurable: true }); Object.defineProperty(ManagementClient.prototype, "relationType", { /** * RelationType API */ get: function () { var _this = this; return { /** * Fetch relation type by alias * @param alias Alias for the relation type queryed for */ byAlias: function (alias) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.relationType.byAlias(alias))]; }); }); } }; }, enumerable: false, configurable: true }); Object.defineProperty(ManagementClient.prototype, "memberGroup", { /** * MemberGroup API */ get: function () { var _this = this; return { /** * Fetch member group by name * @param name The name of the group */ byName: function (name) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.memberGroup.byName(name))]; }); }); }, /** * Create a member group * @param data Data for creating a member group */ 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.memberGroup.create(), data)]; }); }); }, /** * Delete member group * @param name Name of the member group to be removed */ delete: function (name) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.memberGroup.delete(name))]; }); }); } }; }, enumerable: false, configurable: true }); Object.defineProperty(ManagementClient.prototype, "memberType", { /** * MemberType API */ get: function () { var _this = this; return { /** * Fetch all member types */ all: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.memberType.all())]; }); }); }, /** * Find by alias * @param alias Alias for the member type to be found. */ byAlias: function (alias) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.memberType.byAlias(alias))]; }); }); } }; }, enumerable: false, configurable: true }); Object.defineProperty(ManagementClient.prototype, "forms", { /** * Forms API */ get: function () { var _this = this; return { /** * Fetch all forms */ all: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.forms.all())]; }); }); }, /** * Get form by id */ byId: function (id) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.forms.byId(id))]; }); }); }, /** * Submit a new form entry */ submitEntry: function (formId, data) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.management.forms.submitEntry(formId), data)]; }); }); } }; }, enumerable: false, configurable: true }); return ManagementClient; }()); exports.ManagementClient = ManagementClient; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFuYWdlbWVudENsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9DbGllbnRzL01hbmFnZW1lbnQvTWFuYWdlbWVudENsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxxRUFBbUU7QUFDbkUsaUVBQStEO0FBQy9ELG1FQUFpRTtBQUVqRSw2Q0FBMkM7QUFjM0M7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNIO0lBQ0U7O09BRUc7SUFDSCwwQkFDbUIsTUFBYztRQURqQyxpQkFJQztRQUhrQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBS2hCLGdCQUFXLEdBQUcsVUFBVSxRQUFxQixFQUFFLElBQVU7O2dCQUN4RSxzQkFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUE7O2FBQy9DLENBQUE7UUFFRDs7O1dBR0c7UUFDYSxZQUFPLEdBQUcsSUFBSSxpREFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFbEU7OztXQUdHO1FBQ2EsVUFBSyxHQUFHLElBQUksNkNBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRTlEOzs7V0FHRztRQUNhLFdBQU0sR0FBRyxJQUFJLCtDQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQXRCaEUsQ0FBQztJQTJCRCxzQkFBSSx5Q0FBVztRQUhmOztXQUVHO2FBQ0g7WUFBQSxpQkFhQztZQVpDLE9BQU87Z0JBQ0w7O21CQUVHO2dCQUNILEdBQUcsRUFBRTtvQkFBc0Msc0JBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFLLENBQUMsRUFBQTt5QkFBQTtnQkFFdEc7OzttQkFHRztnQkFDSCxPQUFPLEVBQUUsVUFBTyxLQUFhO29CQUFnQyxz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LE1BQWMsRUFBRSxJQUFZO29CQUFLLHNCQUFBLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBQTt5QkFBQTthQUM1SCxDQUFBO1FBQ0gsQ0FBQzs7O09BQUE7SUFDSCx1QkFBQztBQUFELENBQUMsQUFsT0QsSUFrT0M7QUFsT1ksNENBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi4vLi4vQ2xpZW50J1xuaW1wb3J0IHsgQ29udGVudE1hbmFnZW1lbnRDbGllbnQgfSBmcm9tICcuL0NvbnRlbnRNYW5hZ2VtZW50Q2xpZW50J1xuaW1wb3J0IHsgTWVkaWFNYW5hZ2VtZW50Q2xpZW50IH0gZnJvbSAnLi9NZWRpYU1hbmFnZW1lbnRDbGllbnQnXG5pbXBvcnQgeyBNZW1iZXJNYW5hZ2VtZW50Q2xpZW50IH0gZnJvbSAnLi9NZW1iZXJNYW5hZ2VtZW50Q2xpZW50J1xuaW1wb3J0IHsgRW5kcG9pbnQgfSBmcm9tICcuLi8uLi9FbmRwb2ludCdcbmltcG9ydCB7IEVuZHBvaW50cyB9IGZyb20gJy4uLy4uL0VuZHBvaW50cydcbmltcG9ydCB7XG4gIENvbnRlbnRMYW5ndWFnZVR5cGUsXG4gIENvbnRlbnRNZW1iZXJDcmVhdGVHcm91cFR5cGUsXG4gIENvbnRlbnRNZW1iZXJHcm91cFR5cGUsXG4gIENvbnRlbnRNZW1iZXJUeXBlVHlwZSxcbiAgQ29udGVudFR5cGVCYXNlLFxuICBDb250ZW50UmVsYXRpb25UeXBlLFxuICBDb250ZW50UmVsYXRpb25UeXBlVHlwZSxcbiAgQ3JlYXRlQ29udGVudExhbmd1YWdlVHlwZSxcbiAgTWVkaWFUeXBlQ29udGVudE1hbmFnZXIsXG4gIEZvcm1cbn0gZnJvbSAnLi4vLi4vUmVzcG9uc2VzJ1xuXG4vKipcbiAqIE1hbmFnZW1lbnRDbGllbnQgaXMgdXNlZCB0byBhY2Nlc3MgdGhlIENvbnRlbnQgTWFuYWdlbWVudCBBUEkuXG4gKiBAcHVibGljXG4gKlxuICogQGV4YW1wbGVcbiAqIFRoZSB7QGxpbmsgTWFuYWdlbWVudENsaWVudH0gbXVzdCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHtAbGluayBDbGllbnR9LlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IENsaWVudCB9IGZyb20gJ0B1bWJyYWNvL2hlYWRsZXNzLWNsaWVudCdcbiAqXG4gKiBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KHtcbiAqICBwcm9qZWN0QWxpYXM6ICc8eW91ci1wcm9qZWN0LWFsaWFzPicsXG4gKiAgYXBpS2V5OiAnPHlvdXItYXBpLWtleT4nLFxuICogIGxhbmd1YWdlOiAnPGlzby1jb2RlPicsXG4gKiB9KVxuICpcbiAqIGNvbnN0IG1hbmFnZW1lbnRDbGllbnQgPSBjbGllbnQubWFuYWdlbWVudFxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBNYW5hZ2VtZW50Q2xpZW50IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0b3IgKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBDbGllbnRcbiAgKSB7XG5cbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFrZVJlcXVlc3QgPSBhc3luYyA8Uj4oZW5kcG9pbnQ6IEVuZHBvaW50PFI+LCBkYXRhPzogYW55KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50Lm1ha2VSZXF1ZXN0KGVuZHBvaW50LCBkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBDb250ZW50IGNsaWVudCBmb3IgdGhlIENvbnRlbnQgTWFuYWdlbWVudCBBUEkuXG4gICAqIFNlZSB7QGxpbmsgQ29udGVudE1hbmFnZW1lbnRDbGllbnR9XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGVudCA9IG5ldyBDb250ZW50TWFuYWdlbWVudENsaWVudCh0aGlzLmNsaWVudClcblxuICAvKipcbiAgICogVGhlIE1lZGlhIGNsaWVudCBmb3IgdGhlIE1lZGlhIE1hbmFnZW1lbnQgQVBJLlxuICAgKiBTZWUge0BsaW5rIE1lZGlhTWFuYWdlbWVudENsaWVudH1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZWRpYSA9IG5ldyBNZWRpYU1hbmFnZW1lbnRDbGllbnQodGhpcy5jbGllbnQpXG5cbiAgLyoqXG4gICAqIFRoZSBNZW1iZXIgY2xpZW50IGZvciB0aGUgTWVtYmVyIE1hbmFnZW1lbnQgQVBJLlxuICAgKiBTZWUge0BsaW5rIE1lbWJlck1hbmFnZW1lbnRDbGllbnR9XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWVtYmVyID0gbmV3IE1lbWJlck1hbmFnZW1lbnRDbGllbnQodGhpcy5jbGllbnQpXG5cbiAgLyoqXG4gICAqIENvbnRlbnRUeXBlIEFQSVxuICAgKi9cbiAgZ2V0IGNvbnRlbnRUeXBlICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKiBGZXRjaCBhbGwgY29udGVudCB0eXBlc1xuICAgICAgICovXG4gICAgICBhbGw6IGFzeW5jPFIgZXh0ZW5kcyBDb250ZW50VHlwZUJhc2U+KCkgPT4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5jb250ZW50VHlwZS5hbGw8Uj4oKSksXG5cbiAgICAgIC8qKlxuICAgICAgICogRmluZCBjb250ZW50IHR5cGUgYnkgYWxpYXNcbiAgICAgICAqIEBwYXJhbSBhbGlhcyBBbGlhcyBmb3IgdGhlIGNvbnRlbnQgdHlwZVxuICAgICAgICovXG4gICAgICBieUFsaWFzOiBhc3luYyAoYWxpYXM6IHN0cmluZykgOiBQcm9taXNlPENvbnRlbnRUeXBlQmFzZT4gPT4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5jb250ZW50VHlwZS5ieUFsaWFzKGFsaWFzKSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWVkaWEgQVBJXG4gICAqL1xuICBnZXQgbWVkaWFUeXBlICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKiBGZXRjaCBhbGwgbWVkaWEgdHlwZXNcbiAgICAgICAqL1xuICAgICAgYWxsOiBhc3luYyAoKSA6IFByb21pc2U8TWVkaWFUeXBlQ29udGVudE1hbmFnZXJbXT4gPT4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5tZWRpYVR5cGUuYWxsKCkpLFxuXG4gICAgICAvKipcbiAgICAgICAqIEZpbmQgbWVkaWEgdHlwZSBieSBhbGlhc1xuICAgICAgICogQHBhcmFtIGFsaWFzIEFsaWFzIG9mIHRoZSBtZWRpYSB0eXBlIHF1ZXJ5aW5nIGZvclxuICAgICAgICovXG4gICAgICBieUFsaWFzOiBhc3luYyAoYWxpYXM6IHN0cmluZykgOiBQcm9taXNlPE1lZGlhVHlwZUNvbnRlbnRNYW5hZ2VyPiA9PiB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5tYW5hZ2VtZW50Lm1lZGlhVHlwZS5ieUFsaWFzKGFsaWFzKSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGFuZ3VhZ2UgQVBJXG4gICAqL1xuICBnZXQgbGFuZ3VhZ2UgKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIEZldGNoIGFsbCBsYW5ndWFnZXNcbiAgICAgICAqL1xuICAgICAgYWxsOiBhc3luYzxSIGV4dGVuZHMgQ29udGVudExhbmd1YWdlVHlwZT4oKSA9PiB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5tYW5hZ2VtZW50Lmxhbmd1YWdlLmFsbDxSPigpKSxcblxuICAgICAgLyoqXG4gICAgICAgKiBGaW5kIGxhbmd1YWdlIGJ5IElTTyBjb2RlXG4gICAgICAgKiBAcGFyYW0gaWQgSVNPIENvZGUgZm9yIHRoZSBsYW5ndWFnZSAoZS5nLiBlbi1VUylcbiAgICAgICAqL1xuICAgICAgYnlJU09Db2RlOiBhc3luYzxSIGV4dGVuZHMgQ29udGVudExhbmd1YWdlVHlwZT4oaWQ6IHN0cmluZykgPT4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5sYW5ndWFnZS5ieUlTT0NvZGU8Uj4oaWQpKSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGUgYSBsYW5ndWFnZVxuICAgICAgICogQHBhcmFtIGRhdGEgRGF0YSBmb3IgY3JlYXRpbmcgbGFuZ3VhZ2Ugb2JqZWN0XG4gICAgICAgKi9cbiAgICAgIGNyZWF0ZTogYXN5bmM8UiBleHRlbmRzIENvbnRlbnRMYW5ndWFnZVR5cGU+KGRhdGE6IENyZWF0ZUNvbnRlbnRMYW5ndWFnZVR5cGUpID0+IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubGFuZ3VhZ2UuY3JlYXRlPFI+KCksIGRhdGEpLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVwZGF0ZSBhIGxhbmd1YWdlXG4gICAgICAgKiBAcGFyYW0gaWQgSVNPIENvZGUgZm9yIHRoZSBsYW5ndWFnZSAoZS5nLiBlbi1VUylcbiAgICAgICAqIEBwYXJhbSBkYXRhIERhdGEgZm9yIHVwZGF0aW5nIGxhbmd1YWdlIG9iamVjdFxuICAgICAgICovXG4gICAgICB1cGRhdGU6IGFzeW5jPFIgZXh0ZW5kcyBDb250ZW50TGFuZ3VhZ2VUeXBlPihpZDogc3RyaW5nLCBkYXRhOiBDcmVhdGVDb250ZW50TGFuZ3VhZ2VUeXBlKSA9PiB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5tYW5hZ2VtZW50Lmxhbmd1YWdlLnVwZGF0ZTxSPihpZCksIGRhdGEpLFxuXG4gICAgICAvKipcbiAgICAgICAqIERlbGV0ZSBhIGxhbmd1YWdlXG4gICAgICAgKiBAcGFyYW0gaWQgSVNPIENvZGUgZm9yIHRoZSBsYW5ndWFnZSAoZS5nLiBlbi1VUylcbiAgICAgICAqL1xuICAgICAgZGVsZXRlOiBhc3luYzxSIGV4dGVuZHMgQ29udGVudExhbmd1YWdlVHlwZT4oaWQ6IHN0cmluZykgPT4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5sYW5ndWFnZS5kZWxldGU8Uj4oaWQpKVxuXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbGF0aW9uIEFQSVxuICAgKi9cbiAgZ2V0IHJlbGF0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKiBGaW5kIHJlbGF0aW9uIGJ5IGlkXG4gICAgICAgKiBAcGFyYW0gaWQgR1VJRCBwYXJ0IG9mIGFuIFVtYnJhY28gVURJXG4gICAgICAgKi9cbiAgICAgIGJ5SWQ6IGFzeW5jIChpZDogc3RyaW5nKSA6IFByb21pc2U8Q29udGVudFJlbGF0aW9uVHlwZT4gPT4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5yZWxhdGlvbi5ieUlkKGlkKSksXG5cbiAgICAgIC8qKlxuICAgICAgICogRmluZCByZWxhdGlvbiBieSBhbGlhc1xuICAgICAgICogQHBhcmFtIGFsaWFzIEFsaWFzIG9mIHRoZSByZWxhdGlvbiBxdWVyeWluZyBmb3JcbiAgICAgICAqL1xuICAgICAgYnlBbGlhczogYXN5bmMgKGFsaWFzOiBzdHJpbmcpIDogUHJvbWlzZTxDb250ZW50UmVsYXRpb25UeXBlW10+ID0+IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQucmVsYXRpb24uYnlBbGlhcyhhbGlhcykpLFxuXG4gICAgICAvKipcbiAgICAgICAqIEZldGNoIGNoaWxkIGZvciByZWxhdGlvbiB3aXRoIGlkXG4gICAgICAgKiBAcGFyYW0gaWQgR1VJRCBwYXJ0IG9mIGFuIFVtYnJhY28gVURJXG4gICAgICAgKi9cbiAgICAgIGJ5Q2hpbGQ6IGFzeW5jIChpZDogc3RyaW5nKSA6IFByb21pc2U8Q29udGVudFJlbGF0aW9uVHlwZVtdPiA9PiB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5tYW5hZ2VtZW50LnJlbGF0aW9uLmJ5Q2hpbGQoaWQpKSxcblxuICAgICAgLyoqXG4gICAgICAgKiBGZXRjaCBwYXJlbnQgZm9yIHJlbGF0aW9uIHdpdGggaWRcbiAgICAgICAqIEBwYXJhbSBpZCBHVUlEIHBhcnQgb2YgYW4gVW1icmFjbyBVRElcbiAgICAgICAqL1xuICAgICAgYnlQYXJlbnQ6IGFzeW5jIChpZDogc3RyaW5nKSA6IFByb21pc2U8Q29udGVudFJlbGF0aW9uVHlwZVtdPiA9PiB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5tYW5hZ2VtZW50LnJlbGF0aW9uLmJ5UGFyZW50KGlkKSksXG5cbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlIGEgcmVsYXRpb25cbiAgICAgICAqIEBwYXJhbSBkYXRhIERhdGEgZm9yIGNyZWF0aW5nIHJlbGF0aW9uIG9iamVjdFxuICAgICAgICovXG4gICAgICBjcmVhdGU6IGFzeW5jIChkYXRhOiBhbnkpIDogUHJvbWlzZTxDb250ZW50UmVsYXRpb25UeXBlPiA9PiB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5tYW5hZ2VtZW50LnJlbGF0aW9uLmNyZWF0ZSgpLCBkYXRhKSxcblxuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGUgcmVsYXRpb24gd2l0aCBpZFxuICAgICAgICogQHBhcmFtIGlkIEdVSUQgcGFydCBvZiBhbiBVbWJyYWNvIFVESVxuICAgICAgICovXG4gICAgICBkZWxldGU6IGFzeW5jIChpZDogc3RyaW5nKSA6IFByb21pc2U8Q29udGVudFJlbGF0aW9uVHlwZT4gPT4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5yZWxhdGlvbi5kZWxldGUoaWQpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxhdGlvblR5cGUgQVBJXG4gICAqL1xuICBnZXQgcmVsYXRpb25UeXBlICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKiBGZXRjaCByZWxhdGlvbiB0eXBlIGJ5IGFsaWFzXG4gICAgICAgKiBAcGFyYW0gYWxpYXMgQWxpYXMgZm9yIHRoZSByZWxhdGlvbiB0eXBlIHF1ZXJ5ZWQgZm9yXG4gICAgICAgKi9cbiAgICAgIGJ5QWxpYXM6IGFzeW5jIChhbGlhczogc3RyaW5nKSA6IFByb21pc2U8Q29udGVudFJlbGF0aW9uVHlwZVR5cGU+ID0+IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQucmVsYXRpb25UeXBlLmJ5QWxpYXMoYWxpYXMpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZW1iZXJHcm91cCBBUElcbiAgICovXG4gIGdldCBtZW1iZXJHcm91cCAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogRmV0Y2ggbWVtYmVyIGdyb3VwIGJ5IG5hbWVcbiAgICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBncm91cFxuICAgICAgICovXG4gICAgICBieU5hbWU6IGFzeW5jIChuYW1lOiBzdHJpbmcpID0+IHRoaXMubWFrZVJlcXVlc3Q8Q29udGVudE1lbWJlckdyb3VwVHlwZT4oRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyR3JvdXAuYnlOYW1lKG5hbWUpKSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGUgYSBtZW1iZXIgZ3JvdXBcbiAgICAgICAqIEBwYXJhbSBkYXRhIERhdGEgZm9yIGNyZWF0aW5nIGEgbWVtYmVyIGdyb3VwXG4gICAgICAgKi9cbiAgICAgIGNyZWF0ZTogYXN5bmMgKGRhdGE6IENvbnRlbnRNZW1iZXJDcmVhdGVHcm91cFR5cGUpID0+IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQubWVtYmVyR3JvdXAuY3JlYXRlKCksIGRhdGEpLFxuXG4gICAgICAvKipcbiAgICAgICAqIERlbGV0ZSBtZW1iZXIgZ3JvdXBcbiAgICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIG1lbWJlciBncm91cCB0byBiZSByZW1vdmVkXG4gICAgICAgKi9cbiAgICAgIGRlbGV0ZTogYXN5bmMgKG5hbWU6IHN0cmluZykgPT4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5tZW1iZXJHcm91cC5kZWxldGUobmFtZSkpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1lbWJlclR5cGUgQVBJXG4gICAqL1xuICBnZXQgbWVtYmVyVHlwZSAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogRmV0Y2ggYWxsIG1lbWJlciB0eXBlc1xuICAgICAgICovXG4gICAgICBhbGw6IGFzeW5jPFIgZXh0ZW5kcyBDb250ZW50TWVtYmVyVHlwZVR5cGU+KCkgPT4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5tZW1iZXJUeXBlLmFsbDxSPigpKSxcblxuICAgICAgLyoqXG4gICAgICAgKiBGaW5kIGJ5IGFsaWFzXG4gICAgICAgKiBAcGFyYW0gYWxpYXMgQWxpYXMgZm9yIHRoZSBtZW1iZXIgdHlwZSB0byBiZSBmb3VuZC5cbiAgICAgICAqL1xuICAgICAgYnlBbGlhczogYXN5bmM8UiBleHRlbmRzIENvbnRlbnRNZW1iZXJUeXBlVHlwZT4oYWxpYXM6IHN0cmluZykgPT4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5tZW1iZXJUeXBlLmJ5QWxpYXM8Uj4oYWxpYXMpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtcyBBUElcbiAgICovXG4gIGdldCBmb3JtcyAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogRmV0Y2ggYWxsIGZvcm1zXG4gICAgICAgKi9cbiAgICAgIGFsbDogYXN5bmMgKCkgOiBQcm9taXNlPEZvcm1bXT4gPT4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMubWFuYWdlbWVudC5mb3Jtcy5hbGwoKSksXG5cbiAgICAgIC8qKlxuICAgICAgICogR2V0IGZvcm0gYnkgaWRcbiAgICAgICAqL1xuICAgICAgYnlJZDogYXN5bmMgKGlkOiBzdHJpbmcpIDogUHJvbWlzZTxGb3JtPiA9PiB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5tYW5hZ2VtZW50LmZvcm1zLmJ5SWQoaWQpKSxcblxuICAgICAgLyoqXG4gICAgICAgKiBTdWJtaXQgYSBuZXcgZm9ybSBlbnRyeVxuICAgICAgICovXG4gICAgICBzdWJtaXRFbnRyeTogYXN5bmMgKGZvcm1JZDogc3RyaW5nLCBkYXRhOiBvYmplY3QpID0+IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLm1hbmFnZW1lbnQuZm9ybXMuc3VibWl0RW50cnkoZm9ybUlkKSwgZGF0YSlcbiAgICB9XG4gIH1cbn1cbiJdfQ==