UNPKG

@querc/squidex-client

Version:

NodeJS client for the [Squidex](https://squidex.io/) CMS

199 lines (166 loc) 19.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContentSchema = void 0; var _squidexQuery = require("./squidex-query"); function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } class ContentSchema { constructor(config, httpClient, authenticationManager) { this.config = config; this.httpClient = httpClient; this.authenticationManager = authenticationManager; _defineProperty(this, "schema", void 0); } /** * Returns all content from the API matching `query` * Set `draft` to true to return content in draft * */ async query(query = {}, draft = false) { const token = await this.authenticationManager.authenticate(); const path = this.buildPath('', query); const response = await this.httpClient.send({ method: 'GET', path, token, draft }); response.items = response.items.map(x => { return this.convertFromJson(x); }); return response; } /** * Returns the first content item from the API matching `query` * Set `draft` to true to return content in draft * */ async querySingle(query = {}, draft = false) { if (!(query instanceof _squidexQuery.SquidexJsonQuery)) { query.$top = 1; } const response = await this.query(query, draft); return response.items[0]; } /** * Creates a new content item * * @param publish whether to publish the content item immediately */ async create(content, publish = false) { const token = await this.authenticationManager.authenticate(); const path = this.buildPath('', { publish }); const response = await this.httpClient.send({ method: 'POST', path, token, data: content }); return this.convertFromJson(response); } /** * Updates a content item * * @param id ID of the content item */ async update(id, content) { const token = await this.authenticationManager.authenticate(); const path = this.buildPath(id); const response = await this.httpClient.send({ method: 'PUT', path, token, data: content }); return this.convertFromJson(response); } /** * Patches a content item * * @param id ID of the content item */ async patch(id, content) { const token = await this.authenticationManager.authenticate(); const path = this.buildPath(id); const response = await this.httpClient.send({ method: 'PATCH', path, token, data: content }); return this.convertFromJson(response); } /** * Deletes a content item * * @param id ID of the content item */ async delete(id) { const token = await this.authenticationManager.authenticate(); const path = this.buildPath(id); await this.httpClient.send({ method: 'DELETE', path, token }); return true; } /** * Updates the status of a content item * * @param id ID of the content item * @param status the new status */ async updateStatus(id, status) { const token = await this.authenticationManager.authenticate(); const path = this.buildPath(id + '/status'); const data = { Status: status.status }; if (status.dueTime !== undefined) { data.DueTime = status.dueTime.toISOString(); } const response = await this.httpClient.send({ method: 'PUT', path, token, data }); return this.convertFromJson(response); } /** * Discards changes to a content item * * @param id ID of the content item */ async discard(id) { const token = await this.authenticationManager.authenticate(); const path = this.buildPath(id + '/discard'); const response = await this.httpClient.send({ method: 'PUT', path, token }); return this.convertFromJson(response); } // Converts dates etc. convertFromJson(json) { const res = Object.assign({}, json); res.created = new Date(json.created); res.lastModified = new Date(json.lastModified); return res; } // TODO: Extract to helper buildPath(suffix = '', params) { let path = `/api/content/${this.config.appName}/${this.schema}/${suffix}`; if (params !== undefined && params !== {}) { if (params instanceof _squidexQuery.SquidexJsonQuery) { params.q = JSON.stringify(params.q); } const qs = new URLSearchParams(params); path += '?' + qs; } return path; } } exports.ContentSchema = ContentSchema; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL2NvbnRlbnQudHMiXSwibmFtZXMiOlsiQ29udGVudFNjaGVtYSIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwiaHR0cENsaWVudCIsImF1dGhlbnRpY2F0aW9uTWFuYWdlciIsInF1ZXJ5IiwiZHJhZnQiLCJ0b2tlbiIsImF1dGhlbnRpY2F0ZSIsInBhdGgiLCJidWlsZFBhdGgiLCJyZXNwb25zZSIsInNlbmQiLCJtZXRob2QiLCJpdGVtcyIsIm1hcCIsIngiLCJjb252ZXJ0RnJvbUpzb24iLCJxdWVyeVNpbmdsZSIsIlNxdWlkZXhKc29uUXVlcnkiLCIkdG9wIiwiY3JlYXRlIiwiY29udGVudCIsInB1Ymxpc2giLCJkYXRhIiwidXBkYXRlIiwiaWQiLCJwYXRjaCIsImRlbGV0ZSIsInVwZGF0ZVN0YXR1cyIsInN0YXR1cyIsIlN0YXR1cyIsImR1ZVRpbWUiLCJ1bmRlZmluZWQiLCJEdWVUaW1lIiwidG9JU09TdHJpbmciLCJkaXNjYXJkIiwianNvbiIsInJlcyIsIk9iamVjdCIsImFzc2lnbiIsImNyZWF0ZWQiLCJEYXRlIiwibGFzdE1vZGlmaWVkIiwic3VmZml4IiwicGFyYW1zIiwiYXBwTmFtZSIsInNjaGVtYSIsInEiLCJKU09OIiwic3RyaW5naWZ5IiwicXMiLCJVUkxTZWFyY2hQYXJhbXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHQTs7OztBQUtPLE1BQU1BLGFBQU4sQ0FBb0I7QUFHdkJDLEVBQUFBLFdBQVcsQ0FDVUMsTUFEVixFQUVVQyxVQUZWLEVBR1VDLHFCQUhWLEVBSVQ7QUFBQSxTQUhtQkYsTUFHbkIsR0FIbUJBLE1BR25CO0FBQUEsU0FGbUJDLFVBRW5CLEdBRm1CQSxVQUVuQjtBQUFBLFNBRG1CQyxxQkFDbkIsR0FEbUJBLHFCQUNuQjs7QUFBQTtBQUFFO0FBRUo7Ozs7OztBQUlBLFFBQWFDLEtBQWIsQ0FDSUEsS0FBbUIsR0FBRyxFQUQxQixFQUVJQyxLQUFLLEdBQUcsS0FGWixFQUd3RDtBQUNwRCxVQUFNQyxLQUFLLEdBQUcsTUFBTSxLQUFLSCxxQkFBTCxDQUEyQkksWUFBM0IsRUFBcEI7QUFDQSxVQUFNQyxJQUFJLEdBQUcsS0FBS0MsU0FBTCxDQUFlLEVBQWYsRUFBbUJMLEtBQW5CLENBQWI7QUFFQSxVQUFNTSxRQUFRLEdBQUcsTUFBTSxLQUFLUixVQUFMLENBQWdCUyxJQUFoQixDQUFxRTtBQUN4RkMsTUFBQUEsTUFBTSxFQUFFLEtBRGdGO0FBRXhGSixNQUFBQSxJQUZ3RjtBQUd4RkYsTUFBQUEsS0FId0Y7QUFJeEZELE1BQUFBO0FBSndGLEtBQXJFLENBQXZCO0FBT0FLLElBQUFBLFFBQVEsQ0FBQ0csS0FBVCxHQUFpQkgsUUFBUSxDQUFDRyxLQUFULENBQWVDLEdBQWYsQ0FBbUJDLENBQUMsSUFBSTtBQUNyQyxhQUFPLEtBQUtDLGVBQUwsQ0FBd0JELENBQXhCLENBQVA7QUFDSCxLQUZnQixDQUFqQjtBQUlBLFdBQU9MLFFBQVA7QUFDSDtBQUVEOzs7Ozs7QUFJQSxRQUFhTyxXQUFiLENBQWtDYixLQUFtQixHQUFHLEVBQXhELEVBQTREQyxLQUFLLEdBQUcsS0FBcEUsRUFBdUc7QUFDbkcsUUFBSSxFQUFFRCxLQUFLLFlBQVljLDhCQUFuQixDQUFKLEVBQTBDO0FBQ3RDZCxNQUFBQSxLQUFLLENBQUNlLElBQU4sR0FBYSxDQUFiO0FBQ0g7O0FBRUQsVUFBTVQsUUFBUSxHQUFHLE1BQU0sS0FBS04sS0FBTCxDQUFXQSxLQUFYLEVBQWtCQyxLQUFsQixDQUF2QjtBQUVBLFdBQU9LLFFBQVEsQ0FBQ0csS0FBVCxDQUFlLENBQWYsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7QUFLQSxRQUFhTyxNQUFiLENBQW9DQyxPQUFwQyxFQUFnREMsT0FBTyxHQUFHLEtBQTFELEVBQTZGO0FBQ3pGLFVBQU1oQixLQUFLLEdBQUcsTUFBTSxLQUFLSCxxQkFBTCxDQUEyQkksWUFBM0IsRUFBcEI7QUFDQSxVQUFNQyxJQUFJLEdBQUcsS0FBS0MsU0FBTCxDQUFlLEVBQWYsRUFBbUI7QUFBRWEsTUFBQUE7QUFBRixLQUFuQixDQUFiO0FBRUEsVUFBTVosUUFBUSxHQUFHLE1BQU0sS0FBS1IsVUFBTCxDQUFnQlMsSUFBaEIsQ0FBMkM7QUFDOURDLE1BQUFBLE1BQU0sRUFBRSxNQURzRDtBQUU5REosTUFBQUEsSUFGOEQ7QUFHOURGLE1BQUFBLEtBSDhEO0FBSTlEaUIsTUFBQUEsSUFBSSxFQUFFRjtBQUp3RCxLQUEzQyxDQUF2QjtBQU9BLFdBQU8sS0FBS0wsZUFBTCxDQUF3Qk4sUUFBeEIsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7QUFLQSxRQUFhYyxNQUFiLENBQTZCQyxFQUE3QixFQUF5Q0osT0FBekMsRUFBaUY7QUFDN0UsVUFBTWYsS0FBSyxHQUFHLE1BQU0sS0FBS0gscUJBQUwsQ0FBMkJJLFlBQTNCLEVBQXBCO0FBQ0EsVUFBTUMsSUFBSSxHQUFHLEtBQUtDLFNBQUwsQ0FBZWdCLEVBQWYsQ0FBYjtBQUVBLFVBQU1mLFFBQVEsR0FBRyxNQUFNLEtBQUtSLFVBQUwsQ0FBZ0JTLElBQWhCLENBQTJDO0FBQzlEQyxNQUFBQSxNQUFNLEVBQUUsS0FEc0Q7QUFFOURKLE1BQUFBLElBRjhEO0FBRzlERixNQUFBQSxLQUg4RDtBQUk5RGlCLE1BQUFBLElBQUksRUFBRUY7QUFKd0QsS0FBM0MsQ0FBdkI7QUFPQSxXQUFPLEtBQUtMLGVBQUwsQ0FBd0JOLFFBQXhCLENBQVA7QUFDSDtBQUVEOzs7Ozs7O0FBS0EsUUFBYWdCLEtBQWIsQ0FBNEJELEVBQTVCLEVBQXdDSixPQUF4QyxFQUF5RjtBQUNyRixVQUFNZixLQUFLLEdBQUcsTUFBTSxLQUFLSCxxQkFBTCxDQUEyQkksWUFBM0IsRUFBcEI7QUFDQSxVQUFNQyxJQUFJLEdBQUcsS0FBS0MsU0FBTCxDQUFlZ0IsRUFBZixDQUFiO0FBRUEsVUFBTWYsUUFBUSxHQUFHLE1BQU0sS0FBS1IsVUFBTCxDQUFnQlMsSUFBaEIsQ0FBMkM7QUFDOURDLE1BQUFBLE1BQU0sRUFBRSxPQURzRDtBQUU5REosTUFBQUEsSUFGOEQ7QUFHOURGLE1BQUFBLEtBSDhEO0FBSTlEaUIsTUFBQUEsSUFBSSxFQUFFRjtBQUp3RCxLQUEzQyxDQUF2QjtBQU9BLFdBQU8sS0FBS0wsZUFBTCxDQUF3Qk4sUUFBeEIsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7QUFLQSxRQUFhaUIsTUFBYixDQUE2QkYsRUFBN0IsRUFBMkQ7QUFDdkQsVUFBTW5CLEtBQUssR0FBRyxNQUFNLEtBQUtILHFCQUFMLENBQTJCSSxZQUEzQixFQUFwQjtBQUNBLFVBQU1DLElBQUksR0FBRyxLQUFLQyxTQUFMLENBQWVnQixFQUFmLENBQWI7QUFFQSxVQUFNLEtBQUt2QixVQUFMLENBQWdCUyxJQUFoQixDQUFpQztBQUNuQ0MsTUFBQUEsTUFBTSxFQUFFLFFBRDJCO0FBRW5DSixNQUFBQSxJQUZtQztBQUduQ0YsTUFBQUE7QUFIbUMsS0FBakMsQ0FBTjtBQU1BLFdBQU8sSUFBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsUUFBYXNCLFlBQWIsQ0FBbUNILEVBQW5DLEVBQStDSSxNQUEvQyxFQUF3RztBQUNwRyxVQUFNdkIsS0FBSyxHQUFHLE1BQU0sS0FBS0gscUJBQUwsQ0FBMkJJLFlBQTNCLEVBQXBCO0FBQ0EsVUFBTUMsSUFBSSxHQUFHLEtBQUtDLFNBQUwsQ0FBZWdCLEVBQUUsR0FBRyxTQUFwQixDQUFiO0FBRUEsVUFBTUYsSUFBK0IsR0FBRztBQUNwQ08sTUFBQUEsTUFBTSxFQUFFRCxNQUFNLENBQUNBO0FBRHFCLEtBQXhDOztBQUlBLFFBQUlBLE1BQU0sQ0FBQ0UsT0FBUCxLQUFtQkMsU0FBdkIsRUFBa0M7QUFDOUJULE1BQUFBLElBQUksQ0FBQ1UsT0FBTCxHQUFlSixNQUFNLENBQUNFLE9BQVAsQ0FBZUcsV0FBZixFQUFmO0FBQ0g7O0FBRUQsVUFBTXhCLFFBQVEsR0FBRyxNQUFNLEtBQUtSLFVBQUwsQ0FBZ0JTLElBQWhCLENBQTJDO0FBQzlEQyxNQUFBQSxNQUFNLEVBQUUsS0FEc0Q7QUFFOURKLE1BQUFBLElBRjhEO0FBRzlERixNQUFBQSxLQUg4RDtBQUk5RGlCLE1BQUFBO0FBSjhELEtBQTNDLENBQXZCO0FBT0EsV0FBTyxLQUFLUCxlQUFMLENBQXdCTixRQUF4QixDQUFQO0FBQ0g7QUFFRDs7Ozs7OztBQUtBLFFBQWF5QixPQUFiLENBQThCVixFQUE5QixFQUFzRTtBQUNsRSxVQUFNbkIsS0FBSyxHQUFHLE1BQU0sS0FBS0gscUJBQUwsQ0FBMkJJLFlBQTNCLEVBQXBCO0FBQ0EsVUFBTUMsSUFBSSxHQUFHLEtBQUtDLFNBQUwsQ0FBZWdCLEVBQUUsR0FBRyxVQUFwQixDQUFiO0FBRUEsVUFBTWYsUUFBUSxHQUFHLE1BQU0sS0FBS1IsVUFBTCxDQUFnQlMsSUFBaEIsQ0FBMkM7QUFDOURDLE1BQUFBLE1BQU0sRUFBRSxLQURzRDtBQUU5REosTUFBQUEsSUFGOEQ7QUFHOURGLE1BQUFBO0FBSDhELEtBQTNDLENBQXZCO0FBTUEsV0FBTyxLQUFLVSxlQUFMLENBQXdCTixRQUF4QixDQUFQO0FBQ0gsR0F2S3NCLENBeUt2Qjs7O0FBQ1FNLEVBQUFBLGVBQVIsQ0FBMkJvQixJQUEzQixFQUF5RDtBQUNyRCxVQUFNQyxHQUFHLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JILElBQWxCLENBQVo7QUFDQUMsSUFBQUEsR0FBRyxDQUFDRyxPQUFKLEdBQWMsSUFBSUMsSUFBSixDQUFTTCxJQUFJLENBQUNJLE9BQWQsQ0FBZDtBQUNBSCxJQUFBQSxHQUFHLENBQUNLLFlBQUosR0FBbUIsSUFBSUQsSUFBSixDQUFTTCxJQUFJLENBQUNNLFlBQWQsQ0FBbkI7QUFDQSxXQUFPTCxHQUFQO0FBQ0gsR0EvS3NCLENBaUx2Qjs7O0FBQ1E1QixFQUFBQSxTQUFSLENBQWtCa0MsTUFBTSxHQUFHLEVBQTNCLEVBQStCQyxNQUEvQixFQUFxRDtBQUNqRCxRQUFJcEMsSUFBSSxHQUFJLGdCQUFlLEtBQUtQLE1BQUwsQ0FBWTRDLE9BQVEsSUFBRyxLQUFLQyxNQUFPLElBQUdILE1BQU8sRUFBeEU7O0FBRUEsUUFBSUMsTUFBTSxLQUFLWixTQUFYLElBQXdCWSxNQUFNLEtBQUssRUFBdkMsRUFBMkM7QUFDdkMsVUFBSUEsTUFBTSxZQUFZMUIsOEJBQXRCLEVBQXdDO0FBQ3BDMEIsUUFBQUEsTUFBTSxDQUFDRyxDQUFQLEdBQVdDLElBQUksQ0FBQ0MsU0FBTCxDQUFlTCxNQUFNLENBQUNHLENBQXRCLENBQVg7QUFDSDs7QUFDRCxZQUFNRyxFQUFFLEdBQUcsSUFBSUMsZUFBSixDQUFvQlAsTUFBcEIsQ0FBWDtBQUNBcEMsTUFBQUEsSUFBSSxJQUFJLE1BQU0wQyxFQUFkO0FBQ0g7O0FBRUQsV0FBTzFDLElBQVA7QUFDSDs7QUE5THNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3F1aWRleENsaWVudENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uTWFuYWdlciB9IGZyb20gJy4uL2F1dGhlbnRpY2F0aW9uL2F1dGhlbnRpY2F0aW9uLW1hbmFnZXInO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJy4uL2h0dHAnO1xuaW1wb3J0IHsgU3F1aWRleFF1ZXJ5LCBTcXVpZGV4SnNvblF1ZXJ5IH0gZnJvbSAnLi9zcXVpZGV4LXF1ZXJ5JztcbmltcG9ydCB7IFNxdWlkZXhDb250ZW50IH0gZnJvbSAnLi9zcXVpZGV4LWNvbnRlbnQnO1xuaW1wb3J0IHsgU3F1aWRleENvbnRlbnRDb2xsZWN0aW9uIH0gZnJvbSAnLi9zcXVpZGV4LWNvbnRlbnQtY29sbGVjdGlvbic7XG5pbXBvcnQgeyBTcXVpZGV4U3RhdHVzVXBkYXRlIH0gZnJvbSAnLi9zcXVpZGV4LXN0YXR1cy11cGRhdGUnO1xuXG5leHBvcnQgY2xhc3MgQ29udGVudFNjaGVtYSB7XG4gICAgcHVibGljIHNjaGVtYTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBTcXVpZGV4Q2xpZW50Q29uZmlndXJhdGlvbixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uTWFuYWdlcjogQXV0aGVudGljYXRpb25NYW5hZ2VyLFxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIGNvbnRlbnQgZnJvbSB0aGUgQVBJIG1hdGNoaW5nIGBxdWVyeWBcbiAgICAgKiBTZXQgYGRyYWZ0YCB0byB0cnVlIHRvIHJldHVybiBjb250ZW50IGluIGRyYWZ0XG4gICAgICogKi9cbiAgICBwdWJsaWMgYXN5bmMgcXVlcnk8VCA9IGFueT4oXG4gICAgICAgIHF1ZXJ5OiBTcXVpZGV4UXVlcnkgPSB7fSxcbiAgICAgICAgZHJhZnQgPSBmYWxzZSxcbiAgICApOiBQcm9taXNlPFNxdWlkZXhDb250ZW50Q29sbGVjdGlvbjxTcXVpZGV4Q29udGVudDxUPj4+IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0aW9uTWFuYWdlci5hdXRoZW50aWNhdGUoKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoKCcnLCBxdWVyeSk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuc2VuZDxULCBTcXVpZGV4Q29udGVudENvbGxlY3Rpb248U3F1aWRleENvbnRlbnQ8VD4+Pih7XG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICAgZHJhZnQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3BvbnNlLml0ZW1zID0gcmVzcG9uc2UuaXRlbXMubWFwKHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydEZyb21Kc29uPFQ+KHgpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgY29udGVudCBpdGVtIGZyb20gdGhlIEFQSSBtYXRjaGluZyBgcXVlcnlgXG4gICAgICogU2V0IGBkcmFmdGAgdG8gdHJ1ZSB0byByZXR1cm4gY29udGVudCBpbiBkcmFmdFxuICAgICAqICovXG4gICAgcHVibGljIGFzeW5jIHF1ZXJ5U2luZ2xlPFQgPSBhbnk+KHF1ZXJ5OiBTcXVpZGV4UXVlcnkgPSB7fSwgZHJhZnQgPSBmYWxzZSk6IFByb21pc2U8U3F1aWRleENvbnRlbnQ8VD4+IHtcbiAgICAgICAgaWYgKCEocXVlcnkgaW5zdGFuY2VvZiBTcXVpZGV4SnNvblF1ZXJ5KSkge1xuICAgICAgICAgICAgcXVlcnkuJHRvcCA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucXVlcnkocXVlcnksIGRyYWZ0KTtcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuaXRlbXNbMF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb250ZW50IGl0ZW1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwdWJsaXNoIHdoZXRoZXIgdG8gcHVibGlzaCB0aGUgY29udGVudCBpdGVtIGltbWVkaWF0ZWx5XG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZTxUID0gYW55LCBSID0gVD4oY29udGVudDogVCwgcHVibGlzaCA9IGZhbHNlKTogUHJvbWlzZTxTcXVpZGV4Q29udGVudDxSPj4ge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuYXV0aGVudGljYXRpb25NYW5hZ2VyLmF1dGhlbnRpY2F0ZSgpO1xuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGgoJycsIHsgcHVibGlzaCB9KTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudC5zZW5kPFQsIFNxdWlkZXhDb250ZW50PFI+Pih7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIGRhdGE6IGNvbnRlbnQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRGcm9tSnNvbjxSPihyZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBhIGNvbnRlbnQgaXRlbVxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElEIG9mIHRoZSBjb250ZW50IGl0ZW1cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgdXBkYXRlPFQgPSBhbnk+KGlkOiBzdHJpbmcsIGNvbnRlbnQ6IFQpOiBQcm9taXNlPFNxdWlkZXhDb250ZW50PFQ+PiB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5hdXRoZW50aWNhdGlvbk1hbmFnZXIuYXV0aGVudGljYXRlKCk7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aChpZCk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuc2VuZDxULCBTcXVpZGV4Q29udGVudDxUPj4oe1xuICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIGRhdGE6IGNvbnRlbnQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRGcm9tSnNvbjxUPihyZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGF0Y2hlcyBhIGNvbnRlbnQgaXRlbVxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElEIG9mIHRoZSBjb250ZW50IGl0ZW1cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgcGF0Y2g8VCA9IGFueT4oaWQ6IHN0cmluZywgY29udGVudDogUGFydGlhbDxUPik6IFByb21pc2U8U3F1aWRleENvbnRlbnQ8VD4+IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0aW9uTWFuYWdlci5hdXRoZW50aWNhdGUoKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoKGlkKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudC5zZW5kPFQsIFNxdWlkZXhDb250ZW50PFQ+Pih7XG4gICAgICAgICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICBkYXRhOiBjb250ZW50LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RnJvbUpzb248VD4ocmVzcG9uc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBjb250ZW50IGl0ZW1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBJRCBvZiB0aGUgY29udGVudCBpdGVtXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGRlbGV0ZTxUID0gYW55PihpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5hdXRoZW50aWNhdGlvbk1hbmFnZXIuYXV0aGVudGljYXRlKCk7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aChpZCk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnNlbmQ8VCwgYm9vbGVhbj4oe1xuICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgc3RhdHVzIG9mIGEgY29udGVudCBpdGVtXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgSUQgb2YgdGhlIGNvbnRlbnQgaXRlbVxuICAgICAqIEBwYXJhbSBzdGF0dXMgdGhlIG5ldyBzdGF0dXNcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgdXBkYXRlU3RhdHVzPFQgPSBhbnk+KGlkOiBzdHJpbmcsIHN0YXR1czogU3F1aWRleFN0YXR1c1VwZGF0ZSk6IFByb21pc2U8U3F1aWRleENvbnRlbnQ8VD4+IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0aW9uTWFuYWdlci5hdXRoZW50aWNhdGUoKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoKGlkICsgJy9zdGF0dXMnKTtcblxuICAgICAgICBjb25zdCBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgU3RhdHVzOiBzdGF0dXMuc3RhdHVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChzdGF0dXMuZHVlVGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRhLkR1ZVRpbWUgPSBzdGF0dXMuZHVlVGltZS50b0lTT1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuc2VuZDxULCBTcXVpZGV4Q29udGVudDxUPj4oe1xuICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRGcm9tSnNvbjxUPihyZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzY2FyZHMgY2hhbmdlcyB0byBhIGNvbnRlbnQgaXRlbVxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElEIG9mIHRoZSBjb250ZW50IGl0ZW1cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZGlzY2FyZDxUID0gYW55PihpZDogc3RyaW5nKTogUHJvbWlzZTxTcXVpZGV4Q29udGVudDxUPj4ge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuYXV0aGVudGljYXRpb25NYW5hZ2VyLmF1dGhlbnRpY2F0ZSgpO1xuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGgoaWQgKyAnL2Rpc2NhcmQnKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudC5zZW5kPFQsIFNxdWlkZXhDb250ZW50PFQ+Pih7XG4gICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RnJvbUpzb248VD4ocmVzcG9uc2UpO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnRzIGRhdGVzIGV0Yy5cbiAgICBwcml2YXRlIGNvbnZlcnRGcm9tSnNvbjxUPihqc29uOiBhbnkpOiBTcXVpZGV4Q29udGVudDxUPiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IE9iamVjdC5hc3NpZ24oe30sIGpzb24pO1xuICAgICAgICByZXMuY3JlYXRlZCA9IG5ldyBEYXRlKGpzb24uY3JlYXRlZCk7XG4gICAgICAgIHJlcy5sYXN0TW9kaWZpZWQgPSBuZXcgRGF0ZShqc29uLmxhc3RNb2RpZmllZCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRXh0cmFjdCB0byBoZWxwZXJcbiAgICBwcml2YXRlIGJ1aWxkUGF0aChzdWZmaXggPSAnJywgcGFyYW1zPzogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHBhdGggPSBgL2FwaS9jb250ZW50LyR7dGhpcy5jb25maWcuYXBwTmFtZX0vJHt0aGlzLnNjaGVtYX0vJHtzdWZmaXh9YDtcblxuICAgICAgICBpZiAocGFyYW1zICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zICE9PSB7fSkge1xuICAgICAgICAgICAgaWYgKHBhcmFtcyBpbnN0YW5jZW9mIFNxdWlkZXhKc29uUXVlcnkpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucSA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcy5xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHFzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXMpO1xuICAgICAgICAgICAgcGF0aCArPSAnPycgKyBxcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbn1cbiJdfQ==