UNPKG

@neo-one/server

Version:

NEO•ONE Server that NEO•ONE CLI and other clients connect to.

169 lines (167 loc) 25.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const server_plugin_1 = require("@neo-one/server-plugin"); const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); function makeObservable$(ctx) { return new rxjs_1.Observable((observer) => { let completed = false; ctx.req.on('data', (value) => { observer.next(value); }); ctx.req.on('error', (error) => { observer.error(error); }); ctx.req.on('end', () => { completed = true; observer.complete(); }); return () => { if (!completed) { ctx.req.destroy(); } }; }); } exports.services = ({ server }) => { async function executeTaskList(ctx, createTaskList) { const requests$ = makeObservable$(ctx); let taskList; let done = false; await requests$ .pipe(operators_1.switchMap((request) => { switch (request.type) { case 'start': if (taskList === undefined) { taskList = createTaskList(request); } return taskList.status$; case 'abort': if (taskList === undefined) { return rxjs_1.EMPTY; } return taskList.abort$(); default: throw new Error('Unknown request'); } }), operators_1.map((tasks) => { if (!done) { ctx.res.write({ tasks: JSON.stringify(tasks) }); if (server_plugin_1.areTasksDone(tasks)) { done = true; ctx.res.end(); } } })) .toPromise(); } async function handleCRUD(ctx, createTaskList) { return executeTaskList(ctx, (request) => createTaskList(request, server.pluginManager.getResourcesManager({ plugin: request.plugin, resourceType: request.resourceType, }))); } async function handleRead(ctx, createObservable$) { const requests$ = makeObservable$(ctx); let observable$; let done = false; await requests$ .pipe(operators_1.switchMap((request) => { switch (request.type) { case 'start': if (observable$ === undefined) { observable$ = createObservable$(request).pipe(operators_1.map((response) => ({ type: 'response', response }))); } return observable$; case 'abort': return rxjs_1.of({ type: 'aborted' }); default: return rxjs_1.of({ type: 'error', code: 'UNKNOWN_REQUEST', message: `Unknown request: ${request.type}`, }); } }), operators_1.catchError((error) => rxjs_1.of({ type: 'error', code: error.code == undefined || typeof error.code !== 'string' ? 'UNKNOWN_ERROR' : error.code, message: error.message, })), operators_1.map((response) => { if (!done) { ctx.res.write(response); if (response.type === 'aborted' || response.type === 'error') { done = true; ctx.res.end(); } } })) .toPromise(); } return { reset: async (ctx) => { await server.reset(); ctx.res = {}; }, getVersion: async (ctx) => { ctx.res = { version: server_plugin_1.VERSION }; }, verify: async (ctx) => { ctx.res = { ready: true }; }, getDebug: async (ctx) => { ctx.res = { debug: JSON.stringify(server.getDebug()) }; }, getAllPlugins: async (ctx) => { ctx.res = { plugins: server.pluginManager.plugins }; }, getPlugins: async (ctx) => { await handleRead(ctx, () => server.pluginManager.plugins$.pipe(operators_1.map((plugin) => ({ plugin })))); }, getAllResources: async (ctx) => { await handleRead(ctx, () => server.pluginManager.allResources$.pipe(operators_1.map((value) => ({ resources: JSON.stringify(value) })))); }, getResources: async (ctx) => { await handleRead(ctx, (request) => server.pluginManager .getResourcesManager({ plugin: request.plugin, resourceType: request.resourceType, }) .getResources$(JSON.parse(request.options)) .pipe(operators_1.map((value) => ({ resources: JSON.stringify(value) })))); }, getResource: async (ctx) => { await handleRead(ctx, (request) => server.pluginManager .getResourcesManager({ plugin: request.plugin, resourceType: request.resourceType, }) .getResource$({ name: request.name, options: JSON.parse(request.options), }) .pipe(operators_1.map((value) => ({ resource: value === undefined ? value : JSON.stringify(value), })))); }, createResource: async (ctx) => { await handleCRUD(ctx, (request, resourceManager) => resourceManager.create(request.name, JSON.parse(request.options))); }, deleteResource: async (ctx) => { await handleCRUD(ctx, (request, resourceManager) => resourceManager.delete(request.name, JSON.parse(request.options))); }, startResource: async (ctx) => { await handleCRUD(ctx, (request, resourceManager) => resourceManager.start(request.name, JSON.parse(request.options))); }, stopResource: async (ctx) => { await handleCRUD(ctx, (request, resourceManager) => resourceManager.stop(request.name, JSON.parse(request.options))); }, executeTaskList: async (ctx) => { await executeTaskList(ctx, (request) => server.pluginManager .getPlugin({ plugin: request.plugin, }) .executeTaskList(server.pluginManager, request.options)); }, }; }; //# sourceMappingURL=data:application/json;charset=utf8;base64,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LCJmaWxlIjoibmVvLW9uZS1zZXJ2ZXIvc3JjL21pZGRsZXdhcmUvc2VydmljZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZSBuby1hbnkgbm8tb2JqZWN0LW11dGF0aW9uXG5pbXBvcnQge1xuICBhcmVUYXNrc0RvbmUsXG4gIENSVURSZXF1ZXN0LFxuICBDUlVEUmVxdWVzdFN0YXJ0LFxuICBFeGVjdXRlVGFza0xpc3RSZXF1ZXN0LFxuICBFeGVjdXRlVGFza0xpc3RSZXF1ZXN0U3RhcnQsXG4gIFJlYWRSZXF1ZXN0LFxuICBSZWFkUmVzcG9uc2UsXG4gIFRhc2tMaXN0LFxuICBUYXNrU3RhdHVzLFxuICBWRVJTSU9OLFxufSBmcm9tICdAbmVvLW9uZS9zZXJ2ZXItcGx1Z2luJztcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tICdtYWxpJztcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBPYnNlcnZlciwgb2YgYXMgX29mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlc291cmNlc01hbmFnZXIgfSBmcm9tICcuLi9SZXNvdXJjZXNNYW5hZ2VyJztcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gJy4uL1NlcnZlcic7XG5cbmZ1bmN0aW9uIG1ha2VPYnNlcnZhYmxlJDxURGF0YT4oY3R4OiBDb250ZXh0KTogT2JzZXJ2YWJsZTxURGF0YT4ge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxURGF0YT4pID0+IHtcbiAgICBsZXQgY29tcGxldGVkID0gZmFsc2U7XG4gICAgKGN0eCBhcyBhbnkpLnJlcS5vbignZGF0YScsICh2YWx1ZTogVERhdGEpID0+IHtcbiAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgIH0pO1xuICAgIChjdHggYXMgYW55KS5yZXEub24oJ2Vycm9yJywgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgIH0pO1xuICAgIChjdHggYXMgYW55KS5yZXEub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIGNvbXBsZXRlZCA9IHRydWU7XG4gICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICghY29tcGxldGVkKSB7XG4gICAgICAgIChjdHggYXMgYW55KS5yZXEuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3Qgc2VydmljZXMgPSAoeyBzZXJ2ZXIgfTogeyByZWFkb25seSBzZXJ2ZXI6IFNlcnZlciB9KSA9PiB7XG4gIGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVUYXNrTGlzdDxcbiAgICBUUmVxdWVzdCBleHRlbmRzIEV4ZWN1dGVUYXNrTGlzdFJlcXVlc3QsXG4gICAgVFN0YXJ0UmVxdWVzdCBleHRlbmRzIEV4ZWN1dGVUYXNrTGlzdFJlcXVlc3RTdGFydFxuICA+KGN0eDogQ29udGV4dCwgY3JlYXRlVGFza0xpc3Q6IChyZXF1ZXN0OiBUU3RhcnRSZXF1ZXN0KSA9PiBUYXNrTGlzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlcXVlc3RzJCA9IG1ha2VPYnNlcnZhYmxlJDxUUmVxdWVzdCB8IFRTdGFydFJlcXVlc3Q+KGN0eCk7XG4gICAgbGV0IHRhc2tMaXN0OiBUYXNrTGlzdCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIGF3YWl0IHJlcXVlc3RzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVxdWVzdDogVFJlcXVlc3QgfCBUU3RhcnRSZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChyZXF1ZXN0LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgaWYgKHRhc2tMaXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gICAgICAgICAgICAgICAgdGFza0xpc3QgPSBjcmVhdGVUYXNrTGlzdChyZXF1ZXN0IGFzIGFueSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdGFza0xpc3Quc3RhdHVzJDtcbiAgICAgICAgICAgIGNhc2UgJ2Fib3J0JzpcbiAgICAgICAgICAgICAgaWYgKHRhc2tMaXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdGFza0xpc3QuYWJvcnQkKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gcmVxdWVzdCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG1hcCgodGFza3M6IHJlYWRvbmx5IFRhc2tTdGF0dXNbXSkgPT4ge1xuICAgICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgICAgKGN0eCBhcyBhbnkpLnJlcy53cml0ZSh7IHRhc2tzOiBKU09OLnN0cmluZ2lmeSh0YXNrcykgfSk7XG4gICAgICAgICAgICBpZiAoYXJlVGFza3NEb25lKHRhc2tzKSkge1xuICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgKGN0eCBhcyBhbnkpLnJlcy5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNSVUQ8VFJlcXVlc3QgZXh0ZW5kcyBDUlVEUmVxdWVzdCwgVFN0YXJ0UmVxdWVzdCBleHRlbmRzIENSVURSZXF1ZXN0U3RhcnQ+KFxuICAgIGN0eDogQ29udGV4dCxcbiAgICBjcmVhdGVUYXNrTGlzdDogKHJlcXVlc3Q6IFRTdGFydFJlcXVlc3QsIHJlc291cmNlc01hbmFnZXI6IFJlc291cmNlc01hbmFnZXIpID0+IFRhc2tMaXN0LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZXhlY3V0ZVRhc2tMaXN0PFRSZXF1ZXN0LCBUU3RhcnRSZXF1ZXN0PihjdHgsIChyZXF1ZXN0KSA9PlxuICAgICAgY3JlYXRlVGFza0xpc3QoXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHNlcnZlci5wbHVnaW5NYW5hZ2VyLmdldFJlc291cmNlc01hbmFnZXIoe1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgICAgICAgICBwbHVnaW46IChyZXF1ZXN0IGFzIGFueSkucGx1Z2luLFxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IChyZXF1ZXN0IGFzIGFueSkucmVzb3VyY2VUeXBlLFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVhZChjdHg6IENvbnRleHQsIGNyZWF0ZU9ic2VydmFibGUkOiAocmVxdWVzdDogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXF1ZXN0cyQgPSBtYWtlT2JzZXJ2YWJsZSQ8UmVhZFJlcXVlc3Q+KGN0eCk7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxuICAgIGxldCBvYnNlcnZhYmxlJDogT2JzZXJ2YWJsZTxhbnk+IHwgdW5kZWZpbmVkO1xuICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgYXdhaXQgcmVxdWVzdHMkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXF1ZXN0OiBSZWFkUmVxdWVzdCkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAocmVxdWVzdC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgICAgICAgIGlmIChvYnNlcnZhYmxlJCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZSQgPSBjcmVhdGVPYnNlcnZhYmxlJChyZXF1ZXN0KS5waXBlKG1hcCgocmVzcG9uc2UpID0+ICh7IHR5cGU6ICdyZXNwb25zZScsIHJlc3BvbnNlIH0pKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZSQ7XG4gICAgICAgICAgICBjYXNlICdhYm9ydCc6XG4gICAgICAgICAgICAgIHJldHVybiBfb2YoeyB0eXBlOiAnYWJvcnRlZCcgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gX29mKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdVTktOT1dOX1JFUVVFU1QnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmtub3duIHJlcXVlc3Q6ICR7cmVxdWVzdC50eXBlfWAsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PlxuICAgICAgICAgIF9vZih7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgY29kZTogZXJyb3IuY29kZSA9PSB1bmRlZmluZWQgfHwgdHlwZW9mIGVycm9yLmNvZGUgIT09ICdzdHJpbmcnID8gJ1VOS05PV05fRVJST1InIDogZXJyb3IuY29kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IFJlYWRSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgICAgKGN0eCBhcyBhbnkpLnJlcy53cml0ZShyZXNwb25zZSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Fib3J0ZWQnIHx8IHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgIChjdHggYXMgYW55KS5yZXMuZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVzZXQ6IGFzeW5jIChjdHg6IENvbnRleHQpID0+IHtcbiAgICAgIGF3YWl0IHNlcnZlci5yZXNldCgpO1xuICAgICAgKGN0eCBhcyBhbnkpLnJlcyA9IHt9O1xuICAgIH0sXG4gICAgZ2V0VmVyc2lvbjogYXN5bmMgKGN0eDogQ29udGV4dCkgPT4ge1xuICAgICAgKGN0eCBhcyBhbnkpLnJlcyA9IHsgdmVyc2lvbjogVkVSU0lPTiB9O1xuICAgIH0sXG4gICAgdmVyaWZ5OiBhc3luYyAoY3R4OiBDb250ZXh0KSA9PiB7XG4gICAgICAoY3R4IGFzIGFueSkucmVzID0geyByZWFkeTogdHJ1ZSB9O1xuICAgIH0sXG4gICAgZ2V0RGVidWc6IGFzeW5jIChjdHg6IENvbnRleHQpID0+IHtcbiAgICAgIChjdHggYXMgYW55KS5yZXMgPSB7IGRlYnVnOiBKU09OLnN0cmluZ2lmeShzZXJ2ZXIuZ2V0RGVidWcoKSkgfTtcbiAgICB9LFxuICAgIGdldEFsbFBsdWdpbnM6IGFzeW5jIChjdHg6IENvbnRleHQpID0+IHtcbiAgICAgIChjdHggYXMgYW55KS5yZXMgPSB7IHBsdWdpbnM6IHNlcnZlci5wbHVnaW5NYW5hZ2VyLnBsdWdpbnMgfTtcbiAgICB9LFxuICAgIGdldFBsdWdpbnM6IGFzeW5jIChjdHg6IENvbnRleHQpID0+IHtcbiAgICAgIGF3YWl0IGhhbmRsZVJlYWQoY3R4LCAoKSA9PiBzZXJ2ZXIucGx1Z2luTWFuYWdlci5wbHVnaW5zJC5waXBlKG1hcCgocGx1Z2luKSA9PiAoeyBwbHVnaW4gfSkpKSk7XG4gICAgfSxcbiAgICBnZXRBbGxSZXNvdXJjZXM6IGFzeW5jIChjdHg6IENvbnRleHQpID0+IHtcbiAgICAgIGF3YWl0IGhhbmRsZVJlYWQoY3R4LCAoKSA9PlxuICAgICAgICBzZXJ2ZXIucGx1Z2luTWFuYWdlci5hbGxSZXNvdXJjZXMkLnBpcGUobWFwKCh2YWx1ZSkgPT4gKHsgcmVzb3VyY2VzOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgfSkpKSxcbiAgICAgICk7XG4gICAgfSxcbiAgICBnZXRSZXNvdXJjZXM6IGFzeW5jIChjdHg6IENvbnRleHQpID0+IHtcbiAgICAgIGF3YWl0IGhhbmRsZVJlYWQoY3R4LCAocmVxdWVzdCkgPT5cbiAgICAgICAgc2VydmVyLnBsdWdpbk1hbmFnZXJcbiAgICAgICAgICAuZ2V0UmVzb3VyY2VzTWFuYWdlcih7XG4gICAgICAgICAgICBwbHVnaW46IHJlcXVlc3QucGx1Z2luLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiByZXF1ZXN0LnJlc291cmNlVHlwZSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5nZXRSZXNvdXJjZXMkKEpTT04ucGFyc2UocmVxdWVzdC5vcHRpb25zKSlcbiAgICAgICAgICAucGlwZShtYXAoKHZhbHVlKSA9PiAoeyByZXNvdXJjZXM6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSB9KSkpLFxuICAgICAgKTtcbiAgICB9LFxuICAgIGdldFJlc291cmNlOiBhc3luYyAoY3R4OiBDb250ZXh0KSA9PiB7XG4gICAgICBhd2FpdCBoYW5kbGVSZWFkKGN0eCwgKHJlcXVlc3QpID0+XG4gICAgICAgIHNlcnZlci5wbHVnaW5NYW5hZ2VyXG4gICAgICAgICAgLmdldFJlc291cmNlc01hbmFnZXIoe1xuICAgICAgICAgICAgcGx1Z2luOiByZXF1ZXN0LnBsdWdpbixcbiAgICAgICAgICAgIHJlc291cmNlVHlwZTogcmVxdWVzdC5yZXNvdXJjZVR5cGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZ2V0UmVzb3VyY2UkKHtcbiAgICAgICAgICAgIG5hbWU6IHJlcXVlc3QubmFtZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IEpTT04ucGFyc2UocmVxdWVzdC5vcHRpb25zKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgICAgICAgICAgcmVzb3VyY2U6IHZhbHVlID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICApLFxuICAgICAgKTtcbiAgICB9LFxuICAgIGNyZWF0ZVJlc291cmNlOiBhc3luYyAoY3R4OiBDb250ZXh0KSA9PiB7XG4gICAgICBhd2FpdCBoYW5kbGVDUlVEKGN0eCwgKHJlcXVlc3Q6IENSVURSZXF1ZXN0U3RhcnQsIHJlc291cmNlTWFuYWdlcikgPT5cbiAgICAgICAgcmVzb3VyY2VNYW5hZ2VyLmNyZWF0ZShyZXF1ZXN0Lm5hbWUsIEpTT04ucGFyc2UocmVxdWVzdC5vcHRpb25zKSksXG4gICAgICApO1xuICAgIH0sXG4gICAgZGVsZXRlUmVzb3VyY2U6IGFzeW5jIChjdHg6IENvbnRleHQpID0+IHtcbiAgICAgIGF3YWl0IGhhbmRsZUNSVUQoY3R4LCAocmVxdWVzdDogQ1JVRFJlcXVlc3RTdGFydCwgcmVzb3VyY2VNYW5hZ2VyKSA9PlxuICAgICAgICByZXNvdXJjZU1hbmFnZXIuZGVsZXRlKHJlcXVlc3QubmFtZSwgSlNPTi5wYXJzZShyZXF1ZXN0Lm9wdGlvbnMpKSxcbiAgICAgICk7XG4gICAgfSxcbiAgICBzdGFydFJlc291cmNlOiBhc3luYyAoY3R4OiBDb250ZXh0KSA9PiB7XG4gICAgICBhd2FpdCBoYW5kbGVDUlVEKGN0eCwgKHJlcXVlc3Q6IENSVURSZXF1ZXN0U3RhcnQsIHJlc291cmNlTWFuYWdlcikgPT5cbiAgICAgICAgcmVzb3VyY2VNYW5hZ2VyLnN0YXJ0KHJlcXVlc3QubmFtZSwgSlNPTi5wYXJzZShyZXF1ZXN0Lm9wdGlvbnMpKSxcbiAgICAgICk7XG4gICAgfSxcbiAgICBzdG9wUmVzb3VyY2U6IGFzeW5jIChjdHg6IENvbnRleHQpID0+IHtcbiAgICAgIGF3YWl0IGhhbmRsZUNSVUQoY3R4LCAocmVxdWVzdDogQ1JVRFJlcXVlc3RTdGFydCwgcmVzb3VyY2VNYW5hZ2VyKSA9PlxuICAgICAgICByZXNvdXJjZU1hbmFnZXIuc3RvcChyZXF1ZXN0Lm5hbWUsIEpTT04ucGFyc2UocmVxdWVzdC5vcHRpb25zKSksXG4gICAgICApO1xuICAgIH0sXG4gICAgZXhlY3V0ZVRhc2tMaXN0OiBhc3luYyAoY3R4OiBDb250ZXh0KSA9PiB7XG4gICAgICBhd2FpdCBleGVjdXRlVGFza0xpc3QoY3R4LCAocmVxdWVzdDogRXhlY3V0ZVRhc2tMaXN0UmVxdWVzdFN0YXJ0KSA9PlxuICAgICAgICBzZXJ2ZXIucGx1Z2luTWFuYWdlclxuICAgICAgICAgIC5nZXRQbHVnaW4oe1xuICAgICAgICAgICAgcGx1Z2luOiByZXF1ZXN0LnBsdWdpbixcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5leGVjdXRlVGFza0xpc3Qoc2VydmVyLnBsdWdpbk1hbmFnZXIsIHJlcXVlc3Qub3B0aW9ucyksXG4gICAgICApO1xuICAgIH0sXG4gIH07XG59O1xuIl19