UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

246 lines (244 loc) 27.6 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 { __assign, __awaiter, __generator } from "tslib"; // import { config } from './../../config'; import nock from 'nock'; import { Prefetch } from './prefetch'; import { FsRequestErrorCode } from '../request'; var testApiKey = 'AHv2222222222444444uez'; var testSecurity = { policy: 'examplePolicy', signature: 'exampleSignature', }; var testURL = { fileApiUrl: '', uploadApiUrl: 'https://uploadtesturl-fs.com', cloudApiUrl: '', cdnUrl: '', pickerUrl: '', processUrl: '', }; var testSession = { apikey: testApiKey, urls: testURL, }; var scope = nock(testURL.uploadApiUrl); // mock cors responses for all request for browser tests scope.defaultReplyHeaders({ 'access-control-allow-origin': function (req) { var _a; return (_a = req.getHeader('origin')) === null || _a === void 0 ? void 0 : _a.toString(); }, 'access-control-allow-methods': function (req) { var _a; return (_a = req.getHeader('access-control-request-method')) === null || _a === void 0 ? void 0 : _a.toString(); }, 'access-control-allow-headers': function (req) { var _a; return (_a = req.getHeader('access-control-request-headers')) === null || _a === void 0 ? void 0 : _a.toString(); }, 'content-type': 'application/json', }); describe('Prefetch', function () { beforeEach(function () { scope .options(/.*/) .reply(204); }); it('should make correct request to prefetch and return new config', function () { return __awaiter(void 0, void 0, void 0, function () { var sessionCopy, serverResponse, test, prefetch, res; return __generator(this, function (_a) { switch (_a.label) { case 0: sessionCopy = __assign({}, testSession); serverResponse = { blocked: false, settings: { customsource: false, inapp_browser: false, }, permissions: { transforms_ui: false, }, updated_config: { fromSources: ['googledrive'], }, }; scope.post('/prefetch').once().reply(200, serverResponse); test = function () { return 2; }; prefetch = new Prefetch(sessionCopy); return [4 /*yield*/, prefetch.getConfig({ pickerOptions: { // @ts-ignore onFileSelected: test, fromSources: ['googledrive', 'test'], }, })]; case 1: res = _a.sent(); expect(res.pickerOptions.onFileSelected).toEqual(test); expect(res.pickerOptions.fromSources).toEqual(['googledrive']); scope.done(); return [2 /*return*/]; } }); }); }); it('should set correct params to sessions (prefetch)', function () { return __awaiter(void 0, void 0, void 0, function () { var sessionCopy, serverResponse, prefetch, res; return __generator(this, function (_a) { switch (_a.label) { case 0: sessionCopy = __assign({}, testSession); serverResponse = { blocked: false, settings: { customsource: false, inapp_browser: true, }, permissions: { transforms_ui: true, }, updated_config: { fromSources: ['googledrive'], }, }; scope.post('/prefetch').once().reply(200, serverResponse); prefetch = new Prefetch(sessionCopy); return [4 /*yield*/, prefetch.getConfig({ pickerOptions: { fromSources: ['facebook', 'test'], }, })]; case 1: res = _a.sent(); expect(sessionCopy.prefetch).toEqual(expect.any(Object)); expect(sessionCopy.prefetch.settings.inapp_browser).toEqual(true); expect(sessionCopy.prefetch.permissions.transforms_ui).toEqual(true); scope.done(); return [2 /*return*/]; } }); }); }); it('should throw error when response code is other thant 200', function () { return __awaiter(void 0, void 0, void 0, function () { var sessionCopy, prefetch, err_1; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); sessionCopy = __assign({}, testSession); prefetch = new Prefetch(sessionCopy); scope.post('/prefetch').once().reply(500); return [4 /*yield*/, prefetch.getConfig({})]; case 1: _a.sent(); return [3 /*break*/, 3]; case 2: err_1 = _a.sent(); expect(err_1.code).toEqual(FsRequestErrorCode.SERVER); return [3 /*break*/, 3]; case 3: scope.done(); return [2 /*return*/]; } }); }); }); it('should add security to request when provided', function () { return __awaiter(void 0, void 0, void 0, function () { var sessionCopy, mockPref, prefetch, res; return __generator(this, function (_a) { switch (_a.label) { case 0: sessionCopy = __assign(__assign({}, testSession), { signature: testSecurity.signature, policy: testSecurity.policy }); mockPref = jest.fn().mockImplementation(function () { return ({}); }); scope.post('/prefetch').once().reply(200, function (_, data) { return mockPref(data); }); prefetch = new Prefetch(sessionCopy); return [4 /*yield*/, prefetch.getConfig({ pickerOptions: {}, })]; case 1: res = _a.sent(); expect(mockPref).toHaveBeenCalledWith({ apikey: testApiKey, settings: ['inapp_browser'], security: { signature: testSecurity.signature, policy: testSecurity.policy, }, }); scope.done(); return [2 /*return*/]; } }); }); }); it('should always add inapp browser setting to request', function () { return __awaiter(void 0, void 0, void 0, function () { var mockPref, prefetch; return __generator(this, function (_a) { switch (_a.label) { case 0: mockPref = jest.fn().mockImplementation(function () { return ({}); }); scope.post('/prefetch').once().reply(200, function (_, data) { return mockPref(data); }); prefetch = new Prefetch(__assign({}, testSession)); return [4 /*yield*/, prefetch.getConfig({})]; case 1: _a.sent(); expect(mockPref).toHaveBeenCalledWith({ apikey: testApiKey, settings: ['inapp_browser'], }); scope.done(); return [2 /*return*/]; } }); }); }); it('should always add inapp browser setting to request event if some settings are provided', function () { return __awaiter(void 0, void 0, void 0, function () { var mockPref, prefetch; return __generator(this, function (_a) { switch (_a.label) { case 0: mockPref = jest.fn().mockImplementation(function () { return ({}); }); scope.post('/prefetch').once().reply(200, function (_, data) { return mockPref(data); }); prefetch = new Prefetch(__assign({}, testSession)); return [4 /*yield*/, prefetch.getConfig({ settings: ['inapp_browser'] })]; case 1: _a.sent(); expect(mockPref).toHaveBeenCalledWith({ apikey: testApiKey, settings: ['inapp_browser'], }); scope.done(); return [2 /*return*/]; } }); }); }); it('should return old config when updated_config is missing in response', function () { return __awaiter(void 0, void 0, void 0, function () { var sessionCopy, pickerOptions, prefetch, res; return __generator(this, function (_a) { switch (_a.label) { case 0: sessionCopy = __assign(__assign({}, testSession), { signature: testSecurity.signature, policy: testSecurity.policy }); scope.post('/prefetch').once().reply(200, { blocked: true, }); pickerOptions = { uploadInBackground: true, onUploadDone: function () { return console.log; }, storeTo: { location: 'asd', }, }; prefetch = new Prefetch(sessionCopy); return [4 /*yield*/, prefetch.getConfig({ pickerOptions: pickerOptions })]; case 1: res = _a.sent(); expect(res.pickerOptions).toEqual(pickerOptions); scope.done(); return [2 /*return*/]; } }); }); }); }); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpL3ByZWZldGNoLnNwZWMuYnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7O0FBRUgsMkNBQTJDO0FBQzNDLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsUUFBUSxFQUFrQixNQUFNLFlBQVksQ0FBQztBQUV0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFaEQsSUFBTSxVQUFVLEdBQUcsd0JBQXdCLENBQUM7QUFDNUMsSUFBTSxZQUFZLEdBQWE7SUFDN0IsTUFBTSxFQUFFLGVBQWU7SUFDdkIsU0FBUyxFQUFFLGtCQUFrQjtDQUM5QixDQUFDO0FBRUYsSUFBTSxPQUFPLEdBQUc7SUFDZCxVQUFVLEVBQUUsRUFBRTtJQUNkLFlBQVksRUFBRSw4QkFBOEI7SUFDNUMsV0FBVyxFQUFFLEVBQUU7SUFDZixNQUFNLEVBQUUsRUFBRTtJQUNWLFNBQVMsRUFBRSxFQUFFO0lBQ2IsVUFBVSxFQUFFLEVBQUU7Q0FDZixDQUFDO0FBRUYsSUFBTSxXQUFXLEdBQVk7SUFDM0IsTUFBTSxFQUFFLFVBQVU7SUFDbEIsSUFBSSxFQUFFLE9BQU87Q0FDZCxDQUFDO0FBRUYsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUV2Qyx3REFBd0Q7QUFDeEQsS0FBSyxDQUFDLG1CQUFtQixDQUFDO0lBQ3hCLDZCQUE2QixFQUFFLFVBQVUsR0FBRyxZQUFJLE9BQU8sTUFBQSxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQywwQ0FBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0YsOEJBQThCLEVBQUUsVUFBVSxHQUFHLFlBQUksT0FBTyxNQUFBLEdBQUcsQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUMsMENBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JILDhCQUE4QixF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QUFDO29CQUVHLGFBQWEsR0FBRzt3QkFDcEIsa0JBQWtCLEVBQUUsSUFBSTt3QkFDeEIsWUFBWSxFQUFFLGNBQU0sT0FBQSxPQUFPLENBQUMsR0FBRyxFQUFYLENBQVc7d0JBQy9CLE9BQU8sRUFBRTs0QkFDUCxRQUFRLEVBQUUsS0FBSzt5QkFDaEI7cUJBQ0YsQ0FBQztvQkFFSSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQy9CLHFCQUFNLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhLGVBQUEsRUFBRSxDQUFDLEVBQUE7O29CQUFqRCxHQUFHLEdBQUcsU0FBMkM7b0JBRXZELE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUVqRCxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Ozs7U0FDZCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsImZpbGUiOiJsaWIvYXBpL3ByZWZldGNoLnNwZWMuYnJvd3Nlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrLlxuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICdMaWNlbnNlJyk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi8uLi8uLi9jb25maWcnO1xuaW1wb3J0IG5vY2sgZnJvbSAnbm9jayc7XG5pbXBvcnQgeyBQcmVmZXRjaCwgUHJlZmV0Y2hFdmVudHMgfSBmcm9tICcuL3ByZWZldGNoJztcbmltcG9ydCB7IFNlc3Npb24sIFNlY3VyaXR5IH0gZnJvbSAnLi8uLi9jbGllbnQnO1xuaW1wb3J0IHsgRnNSZXF1ZXN0RXJyb3JDb2RlIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5cbmNvbnN0IHRlc3RBcGlLZXkgPSAnQUh2MjIyMjIyMjIyMjQ0NDQ0NHVleic7XG5jb25zdCB0ZXN0U2VjdXJpdHk6IFNlY3VyaXR5ID0ge1xuICBwb2xpY3k6ICdleGFtcGxlUG9saWN5JyxcbiAgc2lnbmF0dXJlOiAnZXhhbXBsZVNpZ25hdHVyZScsXG59O1xuXG5jb25zdCB0ZXN0VVJMID0ge1xuICBmaWxlQXBpVXJsOiAnJyxcbiAgdXBsb2FkQXBpVXJsOiAnaHR0cHM6Ly91cGxvYWR0ZXN0dXJsLWZzLmNvbScsXG4gIGNsb3VkQXBpVXJsOiAnJyxcbiAgY2RuVXJsOiAnJyxcbiAgcGlja2VyVXJsOiAnJyxcbiAgcHJvY2Vzc1VybDogJycsXG59O1xuXG5jb25zdCB0ZXN0U2Vzc2lvbjogU2Vzc2lvbiA9IHtcbiAgYXBpa2V5OiB0ZXN0QXBpS2V5LFxuICB1cmxzOiB0ZXN0VVJMLFxufTtcblxubGV0IHNjb3BlID0gbm9jayh0ZXN0VVJMLnVwbG9hZEFwaVVybCk7XG5cbi8vIG1vY2sgY29ycyByZXNwb25zZXMgZm9yIGFsbCByZXF1ZXN0IGZvciBicm93c2VyIHRlc3RzXG5zY29wZS5kZWZhdWx0UmVwbHlIZWFkZXJzKHtcbiAgJ2FjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbic6IGZ1bmN0aW9uIChyZXEpIHsgcmV0dXJuIHJlcS5nZXRIZWFkZXIoJ29yaWdpbicpPy50b1N0cmluZygpOyB9LFxuICAnYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kcyc6IGZ1bmN0aW9uIChyZXEpIHsgcmV0dXJuIHJlcS5nZXRIZWFkZXIoJ2FjY2Vzcy1jb250cm9sLXJlcXVlc3QtbWV0aG9kJyk/LnRvU3RyaW5nKCk7IH0sXG4gICdhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzJzogZnVuY3Rpb24gKHJlcSkgeyByZXR1cm4gcmVxLmdldEhlYWRlcignYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1oZWFkZXJzJyk/LnRvU3RyaW5nKCk7IH0sXG4gICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG59KTtcblxuZGVzY3JpYmUoJ1ByZWZldGNoJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBzY29wZVxuICAgIC5vcHRpb25zKC8uKi8pXG4gICAgLnJlcGx5KDIwNCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbWFrZSBjb3JyZWN0IHJlcXVlc3QgdG8gcHJlZmV0Y2ggYW5kIHJldHVybiBuZXcgY29uZmlnJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25Db3B5ID0gIHsgLi4udGVzdFNlc3Npb24gfTtcblxuICAgIGNvbnN0IHNlcnZlclJlc3BvbnNlID0ge1xuICAgICAgYmxvY2tlZDogZmFsc2UsXG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICBjdXN0b21zb3VyY2U6IGZhbHNlLFxuICAgICAgICBpbmFwcF9icm93c2VyOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICB0cmFuc2Zvcm1zX3VpOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB1cGRhdGVkX2NvbmZpZzoge1xuICAgICAgICBmcm9tU291cmNlczogWydnb29nbGVkcml2ZSddLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgc2NvcGUucG9zdCgnL3ByZWZldGNoJykub25jZSgpLnJlcGx5KDIwMCwgc2VydmVyUmVzcG9uc2UpO1xuXG4gICAgY29uc3QgdGVzdCA9ICgpID0+IDI7XG5cbiAgICBjb25zdCBwcmVmZXRjaCA9IG5ldyBQcmVmZXRjaChzZXNzaW9uQ29weSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgcHJlZmV0Y2guZ2V0Q29uZmlnKHtcbiAgICAgIHBpY2tlck9wdGlvbnM6IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbGVTZWxlY3RlZDogdGVzdCxcbiAgICAgICAgZnJvbVNvdXJjZXM6IFsnZ29vZ2xlZHJpdmUnLCAndGVzdCddLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXMucGlja2VyT3B0aW9ucy5vbkZpbGVTZWxlY3RlZCkudG9FcXVhbCh0ZXN0KTtcbiAgICBleHBlY3QocmVzLnBpY2tlck9wdGlvbnMuZnJvbVNvdXJjZXMpLnRvRXF1YWwoWydnb29nbGVkcml2ZSddKTtcblxuICAgIHNjb3BlLmRvbmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzZXQgY29ycmVjdCBwYXJhbXMgdG8gc2Vzc2lvbnMgKHByZWZldGNoKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uQ29weSA9ICB7IC4uLnRlc3RTZXNzaW9uIH07XG4gICAgY29uc3Qgc2VydmVyUmVzcG9uc2UgPSB7XG4gICAgICBibG9ja2VkOiBmYWxzZSxcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIGN1c3RvbXNvdXJjZTogZmFsc2UsXG4gICAgICAgIGluYXBwX2Jyb3dzZXI6IHRydWUsXG4gICAgICB9LFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgdHJhbnNmb3Jtc191aTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB1cGRhdGVkX2NvbmZpZzoge1xuICAgICAgICBmcm9tU291cmNlczogWydnb29nbGVkcml2ZSddLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgc2NvcGUucG9zdCgnL3ByZWZldGNoJykub25jZSgpLnJlcGx5KDIwMCwgc2VydmVyUmVzcG9uc2UpO1xuXG4gICAgY29uc3QgcHJlZmV0Y2ggPSBuZXcgUHJlZmV0Y2goc2Vzc2lvbkNvcHkpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHByZWZldGNoLmdldENvbmZpZyh7XG4gICAgICBwaWNrZXJPcHRpb25zOiB7XG4gICAgICAgIGZyb21Tb3VyY2VzOiBbJ2ZhY2Vib29rJywgJ3Rlc3QnXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc2Vzc2lvbkNvcHkucHJlZmV0Y2gpLnRvRXF1YWwoZXhwZWN0LmFueShPYmplY3QpKTtcbiAgICBleHBlY3Qoc2Vzc2lvbkNvcHkucHJlZmV0Y2guc2V0dGluZ3MuaW5hcHBfYnJvd3NlcikudG9FcXVhbCh0cnVlKTtcbiAgICBleHBlY3Qoc2Vzc2lvbkNvcHkucHJlZmV0Y2gucGVybWlzc2lvbnMudHJhbnNmb3Jtc191aSkudG9FcXVhbCh0cnVlKTtcblxuICAgIHNjb3BlLmRvbmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHJlc3BvbnNlIGNvZGUgaXMgb3RoZXIgdGhhbnQgMjAwJywgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZXNzaW9uQ29weSA9ICB7IC4uLnRlc3RTZXNzaW9uIH07XG4gICAgICBjb25zdCBwcmVmZXRjaCA9IG5ldyBQcmVmZXRjaChzZXNzaW9uQ29weSk7XG5cbiAgICAgIHNjb3BlLnBvc3QoJy9wcmVmZXRjaCcpLm9uY2UoKS5yZXBseSg1MDApO1xuXG4gICAgICBhd2FpdCBwcmVmZXRjaC5nZXRDb25maWcoe30pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXhwZWN0KGVyci5jb2RlKS50b0VxdWFsKEZzUmVxdWVzdEVycm9yQ29kZS5TRVJWRVIpO1xuICAgIH1cblxuICAgIHNjb3BlLmRvbmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhZGQgc2VjdXJpdHkgdG8gcmVxdWVzdCB3aGVuIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25Db3B5ID0gIHtcbiAgICAgIC4uLnRlc3RTZXNzaW9uLFxuICAgICAgc2lnbmF0dXJlOiB0ZXN0U2VjdXJpdHkuc2lnbmF0dXJlLFxuICAgICAgcG9saWN5OiB0ZXN0U2VjdXJpdHkucG9saWN5LFxuICAgIH07XG5cbiAgICBjb25zdCBtb2NrUHJlZiA9IGplc3QuZm4oKSAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7fSkpO1xuXG4gICAgc2NvcGUucG9zdCgnL3ByZWZldGNoJykub25jZSgpLnJlcGx5KDIwMCwgKF8sIGRhdGEpID0+IG1vY2tQcmVmKGRhdGEpKTtcblxuICAgIGNvbnN0IHByZWZldGNoID0gbmV3IFByZWZldGNoKHNlc3Npb25Db3B5KTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBwcmVmZXRjaC5nZXRDb25maWcoe1xuICAgICAgcGlja2VyT3B0aW9uczoge30sXG4gICAgfSk7XG5cbiAgICBleHBlY3QobW9ja1ByZWYpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgIGFwaWtleTogdGVzdEFwaUtleSxcbiAgICAgIHNldHRpbmdzOiBbJ2luYXBwX2Jyb3dzZXInXSxcbiAgICAgIHNlY3VyaXR5OiB7XG4gICAgICAgIHNpZ25hdHVyZTogdGVzdFNlY3VyaXR5LnNpZ25hdHVyZSxcbiAgICAgICAgcG9saWN5OiB0ZXN0U2VjdXJpdHkucG9saWN5LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHNjb3BlLmRvbmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhbHdheXMgYWRkIGluYXBwIGJyb3dzZXIgc2V0dGluZyB0byByZXF1ZXN0JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1vY2tQcmVmID0gamVzdC5mbigpIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHt9KSk7XG4gICAgc2NvcGUucG9zdCgnL3ByZWZldGNoJykub25jZSgpLnJlcGx5KDIwMCwgKF8sIGRhdGEpID0+IG1vY2tQcmVmKGRhdGEpKTtcblxuICAgIGNvbnN0IHByZWZldGNoID0gbmV3IFByZWZldGNoKHsgLi4udGVzdFNlc3Npb24gfSk7XG4gICAgYXdhaXQgcHJlZmV0Y2guZ2V0Q29uZmlnKHt9KTtcblxuICAgIGV4cGVjdChtb2NrUHJlZikudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgYXBpa2V5OiB0ZXN0QXBpS2V5LFxuICAgICAgc2V0dGluZ3M6IFsnaW5hcHBfYnJvd3NlciddLFxuICAgIH0pO1xuXG4gICAgc2NvcGUuZG9uZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsd2F5cyBhZGQgaW5hcHAgYnJvd3NlciBzZXR0aW5nIHRvIHJlcXVlc3QgZXZlbnQgaWYgc29tZSBzZXR0aW5ncyBhcmUgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9ja1ByZWYgPSBqZXN0LmZuKCkgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe30pKTtcbiAgICBzY29wZS5wb3N0KCcvcHJlZmV0Y2gnKS5vbmNlKCkucmVwbHkoMjAwLCAoXywgZGF0YSkgPT4gbW9ja1ByZWYoZGF0YSkpO1xuXG4gICAgY29uc3QgcHJlZmV0Y2ggPSBuZXcgUHJlZmV0Y2goeyAuLi50ZXN0U2Vzc2lvbiB9KTtcbiAgICBhd2FpdCBwcmVmZXRjaC5nZXRDb25maWcoeyBzZXR0aW5nczogWydpbmFwcF9icm93c2VyJ10gfSk7XG5cbiAgICBleHBlY3QobW9ja1ByZWYpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgIGFwaWtleTogdGVzdEFwaUtleSxcbiAgICAgIHNldHRpbmdzOiBbJ2luYXBwX2Jyb3dzZXInXSxcbiAgICB9KTtcblxuICAgIHNjb3BlLmRvbmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gb2xkIGNvbmZpZyB3aGVuIHVwZGF0ZWRfY29uZmlnIGlzIG1pc3NpbmcgaW4gcmVzcG9uc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbkNvcHkgPSAge1xuICAgICAgLi4udGVzdFNlc3Npb24sXG4gICAgICBzaWduYXR1cmU6IHRlc3RTZWN1cml0eS5zaWduYXR1cmUsXG4gICAgICBwb2xpY3k6IHRlc3RTZWN1cml0eS5wb2xpY3ksXG4gICAgfTtcblxuICAgIHNjb3BlLnBvc3QoJy9wcmVmZXRjaCcpLm9uY2UoKS5yZXBseSgyMDAsIHtcbiAgICAgIGJsb2NrZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwaWNrZXJPcHRpb25zID0ge1xuICAgICAgdXBsb2FkSW5CYWNrZ3JvdW5kOiB0cnVlLFxuICAgICAgb25VcGxvYWREb25lOiAoKSA9PiBjb25zb2xlLmxvZyxcbiAgICAgIHN0b3JlVG86IHtcbiAgICAgICAgbG9jYXRpb246ICdhc2QnLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJlZmV0Y2ggPSBuZXcgUHJlZmV0Y2goc2Vzc2lvbkNvcHkpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHByZWZldGNoLmdldENvbmZpZyh7IHBpY2tlck9wdGlvbnMgfSk7XG5cbiAgICBleHBlY3QocmVzLnBpY2tlck9wdGlvbnMpLnRvRXF1YWwocGlja2VyT3B0aW9ucyk7XG5cbiAgICBzY29wZS5kb25lKCk7XG4gIH0pO1xufSk7XG4iXX0=