UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

187 lines (185 loc) 20.5 kB
/* * Copyright (c) 2018 by Filestack. * Some rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { __awaiter, __generator } from "tslib"; import { storeURL } from './store'; import { FilestackError } from './../../filestack_error'; import { config } from './../../config'; import { FsRequest } from './../request'; import { Filelink } from './../filelink'; jest.mock('./../filelink'); jest.mock('./../request'); var mockedSession = { apikey: 'fakeApikey', urls: config.urls, }; var workflowIds = ['123', '321']; var storeTaskDef = [{ name: 'store', params: {} }]; var storeTaskDefWithWorkflows = [{ name: 'store', params: {} }]; var sourceToStore = 'urlToStore'; describe('StoreURL', function () { beforeEach(function () { // @ts-ignore FsRequest.post.mockImplementation(function (_, options) { var toReturn = { data: { handle: 'test', }, }; if (options && options.upload_tags) { // @ts-ignore toReturn.data.upload_tags = options.upload_tags; } return Promise.resolve(toReturn); }); // @ts-ignore Filelink.prototype.getTasks.mockImplementation(function () { return storeTaskDef; }); }); it('should call correct store method', function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, storeURL({ session: mockedSession, url: sourceToStore })]; case 1: _a.sent(); expect(FsRequest.post).toHaveBeenCalledWith("".concat(mockedSession.urls.processUrl, "/process"), { apikey: mockedSession.apikey, sources: [sourceToStore], tasks: storeTaskDef, upload_tags: undefined, }, {}); return [2 /*return*/]; } }); }); }); it('should respect passed security and policy', function () { return __awaiter(void 0, void 0, void 0, function () { var fakeSecurity; return __generator(this, function (_a) { switch (_a.label) { case 0: fakeSecurity = { signature: 'fakeS', policy: 'fakeP', }; return [4 /*yield*/, storeURL({ session: mockedSession, url: sourceToStore, security: fakeSecurity })]; case 1: _a.sent(); expect(Filelink.prototype.security).toHaveBeenCalledWith(fakeSecurity); expect(FsRequest.post).toHaveBeenCalledWith("".concat(mockedSession.urls.processUrl, "/process"), { apikey: mockedSession.apikey, sources: [sourceToStore], tasks: storeTaskDef, upload_tags: undefined, }, {}); return [2 /*return*/]; } }); }); }); it('should throw error on wrong store params', function () { return expect(storeURL({ session: mockedSession, url: sourceToStore, storeParams: { // @ts-ignore test: 123, }, })).rejects.toEqual(expect.any(FilestackError)); }); it('should respect token cancel', function () { return __awaiter(void 0, void 0, void 0, function () { var token; return __generator(this, function (_a) { switch (_a.label) { case 0: token = { cancel: function () { console.log('cancel method'); }, }; return [4 /*yield*/, storeURL({ session: mockedSession, url: sourceToStore, token: token, })]; case 1: _a.sent(); expect(FsRequest.post).toHaveBeenCalledWith("".concat(mockedSession.urls.processUrl, "/process"), { apikey: mockedSession.apikey, sources: [sourceToStore], tasks: storeTaskDef, upload_tags: undefined, // expect.any(FsCancelToken) is not working correctly with mocked functions }, { cancelToken: expect.any(Object) }); return [2 /*return*/]; } }); }); }); it('should pass upload tags to request', function () { return __awaiter(void 0, void 0, void 0, function () { var uploadTags, res; return __generator(this, function (_a) { switch (_a.label) { case 0: uploadTags = { test: '123' }; return [4 /*yield*/, storeURL({ session: mockedSession, url: sourceToStore, uploadTags: uploadTags, })]; case 1: res = _a.sent(); expect(FsRequest.post).toHaveBeenCalledWith("".concat(mockedSession.urls.processUrl, "/process"), { apikey: mockedSession.apikey, sources: [sourceToStore], tasks: storeTaskDef, upload_tags: uploadTags, }, {}); expect(res.uploadTags).toEqual(uploadTags); return [2 /*return*/]; } }); }); }); it('should throw an error when missing url', function () { return expect(storeURL({ session: mockedSession })).rejects.toEqual(expect.any(FilestackError)); }); it('should throw on missing handle in response', function () { // @ts-ignore FsRequest.post.mockImplementation(function () { return Promise.resolve({ data: {}, }); }); return expect(storeURL({ session: mockedSession, url: sourceToStore, })).rejects.toEqual(expect.any(FilestackError)); }); it('should be able to run storeUrl with workflows', function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, storeURL({ session: mockedSession, url: sourceToStore, workflowIds: workflowIds, })]; case 1: _a.sent(); expect(FsRequest.post).toHaveBeenCalledWith("".concat(mockedSession.urls.processUrl, "/process"), { apikey: mockedSession.apikey, sources: [sourceToStore], tasks: storeTaskDefWithWorkflows, }, {}); return [2 /*return*/]; } }); }); }); }); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpL3N0b3JlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTFCLElBQU0sYUFBYSxHQUFZO0lBQzdCLE1BQU0sRUFBRSxZQUFZO0lBQ3BCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtDQUNsQixDQUFDO0FBRUYsSUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFbkMsSUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckQsSUFBTSx5QkFBeUIsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRSxJQUFNLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFFbkMsUUFBUSxDQUFDLFVBQVUsRUFBRTtJQUVuQixVQUFVLENBQUM7UUFDVCxhQUFhO1FBQ2IsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFDLENBQUMsRUFBRSxPQUFPO1lBQzNDLElBQUksUUFBUSxHQUFHO2dCQUNiLElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUUsTUFBTTtpQkFDZjth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LENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFO1FBRS9DLGFBQWE7UUFDYixTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQU0sT0FBQSxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3RELElBQUksRUFBRSxFQUFFO1NBQ1QsQ0FBQyxFQUZzQyxDQUV0QyxDQUFDLENBQUM7UUFFSixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDckIsT0FBTyxFQUFFLGFBQWE7WUFDdEIsR0FBRyxFQUFFLGFBQWE7U0FDbkIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUU7Ozt3QkFDbEQscUJBQU0sUUFBUSxDQUFDO3dCQUNiLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixHQUFHLEVBQUUsYUFBYTt3QkFDbEIsV0FBVyxhQUFBO3FCQUNaLENBQUMsRUFBQTs7b0JBSkYsU0FJRSxDQUFDO29CQUVILE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLENBQUMsVUFBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsYUFBVSxFQUFFO3dCQUN0RixNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07d0JBQzVCLE9BQU8sRUFBRSxDQUFFLGFBQWEsQ0FBRTt3QkFDMUIsS0FBSyxFQUFFLHlCQUF5QjtxQkFDakMsRUFBRSxFQUFFLENBQUMsQ0FBQzs7OztTQUNSLENBQUMsQ0FBQztBQUVMLENBQUMsQ0FBQyxDQUFDIiwiZmlsZSI6ImxpYi9hcGkvc3RvcmUuc3BlYy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrLlxuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IHN0b3JlVVJMIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgeyBTZXNzaW9uIH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB7IEZpbGVzdGFja0Vycm9yIH0gZnJvbSAnLi8uLi8uLi9maWxlc3RhY2tfZXJyb3InO1xuXG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuLy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBGc1JlcXVlc3QgfSBmcm9tICcuLy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgRmlsZWxpbmsgfSBmcm9tICcuLy4uL2ZpbGVsaW5rJztcblxuamVzdC5tb2NrKCcuLy4uL2ZpbGVsaW5rJyk7XG5qZXN0Lm1vY2soJy4vLi4vcmVxdWVzdCcpO1xuXG5jb25zdCBtb2NrZWRTZXNzaW9uOiBTZXNzaW9uID0ge1xuICBhcGlrZXk6ICdmYWtlQXBpa2V5JyxcbiAgdXJsczogY29uZmlnLnVybHMsXG59O1xuXG5jb25zdCB3b3JrZmxvd0lkcyA9IFsnMTIzJywgJzMyMSddO1xuXG5jb25zdCBzdG9yZVRhc2tEZWYgPSBbeyBuYW1lOiAnc3RvcmUnLCBwYXJhbXM6IHt9IH1dO1xuY29uc3Qgc3RvcmVUYXNrRGVmV2l0aFdvcmtmbG93cyA9IFt7IG5hbWU6ICdzdG9yZScsIHBhcmFtczoge30gfV07XG5jb25zdCBzb3VyY2VUb1N0b3JlID0gJ3VybFRvU3RvcmUnO1xuXG5kZXNjcmliZSgnU3RvcmVVUkwnLCAoKSA9PiB7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIEZzUmVxdWVzdC5wb3N0Lm1vY2tJbXBsZW1lbnRhdGlvbigoXywgb3B0aW9ucykgPT4ge1xuICAgICAgbGV0IHRvUmV0dXJuID0ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgaGFuZGxlOiAndGVzdCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVwbG9hZF90YWdzKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdG9SZXR1cm4uZGF0YS51cGxvYWRfdGFncyA9IG9wdGlvbnMudXBsb2FkX3RhZ3M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodG9SZXR1cm4pO1xuICAgIH0pO1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIEZpbGVsaW5rLnByb3RvdHlwZS5nZXRUYXNrcy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gc3RvcmVUYXNrRGVmKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjYWxsIGNvcnJlY3Qgc3RvcmUgbWV0aG9kJywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHN0b3JlVVJMKHsgc2Vzc2lvbjogbW9ja2VkU2Vzc2lvbiwgdXJsOiBzb3VyY2VUb1N0b3JlIH0pO1xuXG4gICAgZXhwZWN0KEZzUmVxdWVzdC5wb3N0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChgJHttb2NrZWRTZXNzaW9uLnVybHMucHJvY2Vzc1VybH0vcHJvY2Vzc2AsIHtcbiAgICAgIGFwaWtleTogbW9ja2VkU2Vzc2lvbi5hcGlrZXksXG4gICAgICBzb3VyY2VzOiBbIHNvdXJjZVRvU3RvcmUgXSxcbiAgICAgIHRhc2tzOiBzdG9yZVRhc2tEZWYsXG4gICAgICB1cGxvYWRfdGFnczogdW5kZWZpbmVkLFxuICAgIH0sIHt9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXNwZWN0IHBhc3NlZCBzZWN1cml0eSBhbmQgcG9saWN5JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGZha2VTZWN1cml0eSA9IHtcbiAgICAgIHNpZ25hdHVyZTogJ2Zha2VTJyxcbiAgICAgIHBvbGljeTogJ2Zha2VQJyxcbiAgICB9O1xuXG4gICAgYXdhaXQgc3RvcmVVUkwoeyBzZXNzaW9uOiBtb2NrZWRTZXNzaW9uLCB1cmw6IHNvdXJjZVRvU3RvcmUsIHNlY3VyaXR5OiBmYWtlU2VjdXJpdHkgfSk7XG5cbiAgICBleHBlY3QoRmlsZWxpbmsucHJvdG90eXBlLnNlY3VyaXR5KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChmYWtlU2VjdXJpdHkpO1xuXG4gICAgZXhwZWN0KEZzUmVxdWVzdC5wb3N0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChgJHttb2NrZWRTZXNzaW9uLnVybHMucHJvY2Vzc1VybH0vcHJvY2Vzc2AsIHtcbiAgICAgIGFwaWtleTogbW9ja2VkU2Vzc2lvbi5hcGlrZXksXG4gICAgICBzb3VyY2VzOiBbIHNvdXJjZVRvU3RvcmUgXSxcbiAgICAgIHRhc2tzOiBzdG9yZVRhc2tEZWYsXG4gICAgICB1cGxvYWRfdGFnczogdW5kZWZpbmVkLFxuICAgIH0sIHt9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBvbiB3cm9uZyBzdG9yZSBwYXJhbXMnLCAoKSA9PiB7XG4gICAgcmV0dXJuIGV4cGVjdChzdG9yZVVSTCh7XG4gICAgICBzZXNzaW9uOiBtb2NrZWRTZXNzaW9uLFxuICAgICAgdXJsOiBzb3VyY2VUb1N0b3JlLFxuICAgICAgc3RvcmVQYXJhbXM6IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0ZXN0OiAxMjMsXG4gICAgICB9LFxuICAgIH0pKS5yZWplY3RzLnRvRXF1YWwoZXhwZWN0LmFueShGaWxlc3RhY2tFcnJvcikpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlc3BlY3QgdG9rZW4gY2FuY2VsJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIHNpbXVsYXRlIG9sZCB0b2tlblxuICAgIGNvbnN0IHRva2VuID0ge1xuICAgICAgY2FuY2VsOiAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjYW5jZWwgbWV0aG9kJyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBzdG9yZVVSTCh7XG4gICAgICBzZXNzaW9uOiBtb2NrZWRTZXNzaW9uLFxuICAgICAgdXJsOiBzb3VyY2VUb1N0b3JlLFxuICAgICAgdG9rZW4sXG4gICAgfSk7XG5cbiAgICBleHBlY3QoRnNSZXF1ZXN0LnBvc3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGAke21vY2tlZFNlc3Npb24udXJscy5wcm9jZXNzVXJsfS9wcm9jZXNzYCwge1xuICAgICAgYXBpa2V5OiBtb2NrZWRTZXNzaW9uLmFwaWtleSxcbiAgICAgIHNvdXJjZXM6IFsgc291cmNlVG9TdG9yZSBdLFxuICAgICAgdGFza3M6IHN0b3JlVGFza0RlZixcbiAgICAgIHVwbG9hZF90YWdzOiB1bmRlZmluZWQsXG5cbiAgICAgIC8vIGV4cGVjdC5hbnkoRnNDYW5jZWxUb2tlbikgaXMgbm90IHdvcmtpbmcgY29ycmVjdGx5IHdpdGggbW9ja2VkIGZ1bmN0aW9uc1xuICAgIH0sIHsgY2FuY2VsVG9rZW46IGV4cGVjdC5hbnkoT2JqZWN0KSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIHVwbG9hZCB0YWdzIHRvIHJlcXVlc3QnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXBsb2FkVGFncyA9IHsgdGVzdDogJzEyMycgfTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHN0b3JlVVJMKHtcbiAgICAgIHNlc3Npb246IG1vY2tlZFNlc3Npb24sXG4gICAgICB1cmw6IHNvdXJjZVRvU3RvcmUsXG4gICAgICB1cGxvYWRUYWdzLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KEZzUmVxdWVzdC5wb3N0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChgJHttb2NrZWRTZXNzaW9uLnVybHMucHJvY2Vzc1VybH0vcHJvY2Vzc2AsIHtcbiAgICAgIGFwaWtleTogbW9ja2VkU2Vzc2lvbi5hcGlrZXksXG4gICAgICBzb3VyY2VzOiBbIHNvdXJjZVRvU3RvcmUgXSxcbiAgICAgIHRhc2tzOiBzdG9yZVRhc2tEZWYsXG4gICAgICB1cGxvYWRfdGFnczogdXBsb2FkVGFncyxcbiAgICB9LCB7fSk7XG5cbiAgICBleHBlY3QocmVzLnVwbG9hZFRhZ3MpLnRvRXF1YWwodXBsb2FkVGFncyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBtaXNzaW5nIHVybCcsICgpID0+IHtcbiAgICByZXR1cm4gZXhwZWN0KHN0b3JlVVJMKHsgc2Vzc2lvbjogbW9ja2VkU2Vzc2lvbiB9KSkucmVqZWN0cy50b0VxdWFsKGV4cGVjdC5hbnkoRmlsZXN0YWNrRXJyb3IpKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBtaXNzaW5nIGhhbmRsZSBpbiByZXNwb25zZScsICgpID0+IHtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBGc1JlcXVlc3QucG9zdC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIGRhdGE6IHt9LFxuICAgIH0pKTtcblxuICAgIHJldHVybiBleHBlY3Qoc3RvcmVVUkwoe1xuICAgICAgc2Vzc2lvbjogbW9ja2VkU2Vzc2lvbixcbiAgICAgIHVybDogc291cmNlVG9TdG9yZSxcbiAgICB9KSkucmVqZWN0cy50b0VxdWFsKGV4cGVjdC5hbnkoRmlsZXN0YWNrRXJyb3IpKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIHJ1biBzdG9yZVVybCB3aXRoIHdvcmtmbG93cycsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBzdG9yZVVSTCh7XG4gICAgICBzZXNzaW9uOiBtb2NrZWRTZXNzaW9uLFxuICAgICAgdXJsOiBzb3VyY2VUb1N0b3JlLFxuICAgICAgd29ya2Zsb3dJZHMsXG4gICAgfSk7XG5cbiAgICBleHBlY3QoRnNSZXF1ZXN0LnBvc3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGAke21vY2tlZFNlc3Npb24udXJscy5wcm9jZXNzVXJsfS9wcm9jZXNzYCwge1xuICAgICAgYXBpa2V5OiBtb2NrZWRTZXNzaW9uLmFwaWtleSxcbiAgICAgIHNvdXJjZXM6IFsgc291cmNlVG9TdG9yZSBdLFxuICAgICAgdGFza3M6IHN0b3JlVGFza0RlZldpdGhXb3JrZmxvd3MsXG4gICAgfSwge30pO1xuICB9KTtcblxufSk7XG4iXX0=