filestack-js
Version:
Official JavaScript library for Filestack
189 lines (187 loc) • 20.8 kB
JavaScript
/*
* 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.
*/
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var store_1 = require("./store");
var filestack_error_1 = require("./../../filestack_error");
var config_1 = require("./../../config");
var request_1 = require("./../request");
var filelink_1 = require("./../filelink");
jest.mock('./../filelink');
jest.mock('./../request');
var mockedSession = {
apikey: 'fakeApikey',
urls: config_1.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
request_1.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_1.Filelink.prototype.getTasks.mockImplementation(function () { return storeTaskDef; });
});
it('should call correct store method', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, store_1.storeURL)({ session: mockedSession, url: sourceToStore })];
case 1:
_a.sent();
expect(request_1.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 tslib_1.__awaiter(void 0, void 0, void 0, function () {
var fakeSecurity;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
fakeSecurity = {
signature: 'fakeS',
policy: 'fakeP',
};
return [4 /*yield*/, (0, store_1.storeURL)({ session: mockedSession, url: sourceToStore, security: fakeSecurity })];
case 1:
_a.sent();
expect(filelink_1.Filelink.prototype.security).toHaveBeenCalledWith(fakeSecurity);
expect(request_1.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((0, store_1.storeURL)({
session: mockedSession,
url: sourceToStore,
storeParams: {
// @ts-ignore
test: 123,
},
})).rejects.toEqual(expect.any(filestack_error_1.FilestackError));
});
it('should respect token cancel', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var token;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
token = {
cancel: function () {
console.log('cancel method');
},
};
return [4 /*yield*/, (0, store_1.storeURL)({
session: mockedSession,
url: sourceToStore,
token: token,
})];
case 1:
_a.sent();
expect(request_1.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 tslib_1.__awaiter(void 0, void 0, void 0, function () {
var uploadTags, res;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
uploadTags = { test: '123' };
return [4 /*yield*/, (0, store_1.storeURL)({
session: mockedSession,
url: sourceToStore,
uploadTags: uploadTags,
})];
case 1:
res = _a.sent();
expect(request_1.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((0, store_1.storeURL)({ session: mockedSession })).rejects.toEqual(expect.any(filestack_error_1.FilestackError));
});
it('should throw on missing handle in response', function () {
// @ts-ignore
request_1.FsRequest.post.mockImplementation(function () { return Promise.resolve({
data: {},
}); });
return expect((0, store_1.storeURL)({
session: mockedSession,
url: sourceToStore,
})).rejects.toEqual(expect.any(filestack_error_1.FilestackError));
});
it('should be able to run storeUrl with workflows', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, store_1.storeURL)({
session: mockedSession,
url: sourceToStore,
workflowIds: workflowIds,
})];
case 1:
_a.sent();
expect(request_1.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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpL3N0b3JlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7O0FBRUgsaUNBQW1DO0FBRW5DLDJEQUF5RDtBQUV6RCx5Q0FBd0M7QUFDeEMsd0NBQXlDO0FBQ3pDLDBDQUF5QztBQUV6QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFMUIsSUFBTSxhQUFhLEdBQVk7SUFDN0IsTUFBTSxFQUFFLFlBQVk7SUFDcEIsSUFBSSxFQUFFLGVBQU0sQ0FBQyxJQUFJO0NBQ2xCLENBQUM7QUFFRixJQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUVuQyxJQUFNLFlBQVksR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyRCxJQUFNLHlCQUF5QixHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLElBQU0sYUFBYSxHQUFHLFlBQVksQ0FBQztBQUVuQyxRQUFRLENBQUMsVUFBVSxFQUFFO0lBRW5CLFVBQVUsQ0FBQztRQUNULGFBQWE7UUFDYixtQkFBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFDLENBQUMsRUFBRSxPQUFPO1lBQzNDLElBQUksUUFBUSxHQUFHO2dCQUNiLElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUUsTUFBTTtpQkFDZjthQUNGLENBQUM7WUFFRixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUNsQyxhQUFhO2dCQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDakQ7WUFFRCxPQUFPLE9BQU8sQ0FB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T0FBQSxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3RELElBQUksRUFBRSxFQUFFO1NBQ1QsQ0FBQyxFQUZzQyxDQUV0QyxDQUFDLENBQUM7UUFFSixPQUFPLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUM7WUFDckIsT0FBTyxFQUFFLGFBQWE7WUFDdEIsR0FBRyxFQUFFLGFBQWE7U0FDbkIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGdDQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFOzs7d0JBQ2xELHFCQUFNLElBQUEsZ0JBQVEsRUFBQzt3QkFDYixPQUFPLEVBQUUsYUFBYTt3QkFDdEIsR0FBRyxFQUFFLGFBQWE7d0JBQ2xCLFdBQVcsYUFBQTtxQkFDWixDQUFDLEVBQUE7O29CQUpGLFNBSUUsQ0FBQztvQkFFSCxNQUFNLENBQUMsbUJBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxhQUFVLEVBQUU7d0JBQ3RGLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTt3QkFDNUIsT0FBTyxFQUFFLENBQUUsYUFBYSxDQUFFO3dCQUMxQixLQUFLLEVBQUUseUJBQXlCO3FCQUNqQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7O1NBQ1IsQ0FBQyxDQUFDO0FBRUwsQ0FBQyxDQUFDLENBQUMiLCJmaWxlIjoibGliL2FwaS9zdG9yZS5zcGVjLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2suXG4gKiBTb21lIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgc3RvcmVVUkwgfSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgRmlsZXN0YWNrRXJyb3IgfSBmcm9tICcuLy4uLy4uL2ZpbGVzdGFja19lcnJvcic7XG5cbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4vLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IEZzUmVxdWVzdCB9IGZyb20gJy4vLi4vcmVxdWVzdCc7XG5pbXBvcnQgeyBGaWxlbGluayB9IGZyb20gJy4vLi4vZmlsZWxpbmsnO1xuXG5qZXN0Lm1vY2soJy4vLi4vZmlsZWxpbmsnKTtcbmplc3QubW9jaygnLi8uLi9yZXF1ZXN0Jyk7XG5cbmNvbnN0IG1vY2tlZFNlc3Npb246IFNlc3Npb24gPSB7XG4gIGFwaWtleTogJ2Zha2VBcGlrZXknLFxuICB1cmxzOiBjb25maWcudXJscyxcbn07XG5cbmNvbnN0IHdvcmtmbG93SWRzID0gWycxMjMnLCAnMzIxJ107XG5cbmNvbnN0IHN0b3JlVGFza0RlZiA9IFt7IG5hbWU6ICdzdG9yZScsIHBhcmFtczoge30gfV07XG5jb25zdCBzdG9yZVRhc2tEZWZXaXRoV29ya2Zsb3dzID0gW3sgbmFtZTogJ3N0b3JlJywgcGFyYW1zOiB7fSB9XTtcbmNvbnN0IHNvdXJjZVRvU3RvcmUgPSAndXJsVG9TdG9yZSc7XG5cbmRlc2NyaWJlKCdTdG9yZVVSTCcsICgpID0+IHtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgRnNSZXF1ZXN0LnBvc3QubW9ja0ltcGxlbWVudGF0aW9uKChfLCBvcHRpb25zKSA9PiB7XG4gICAgICBsZXQgdG9SZXR1cm4gPSB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBoYW5kbGU6ICd0ZXN0JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudXBsb2FkX3RhZ3MpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0b1JldHVybi5kYXRhLnVwbG9hZF90YWdzID0gb3B0aW9ucy51cGxvYWRfdGFncztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0b1JldHVybik7XG4gICAgfSk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgRmlsZWxpbmsucHJvdG90eXBlLmdldFRhc2tzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBzdG9yZVRhc2tEZWYpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNhbGwgY29ycmVjdCBzdG9yZSBtZXRob2QnLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc3RvcmVVUkwoeyBzZXNzaW9uOiBtb2NrZWRTZXNzaW9uLCB1cmw6IHNvdXJjZVRvU3RvcmUgfSk7XG5cbiAgICBleHBlY3QoRnNSZXF1ZXN0LnBvc3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGAke21vY2tlZFNlc3Npb24udXJscy5wcm9jZXNzVXJsfS9wcm9jZXNzYCwge1xuICAgICAgYXBpa2V5OiBtb2NrZWRTZXNzaW9uLmFwaWtleSxcbiAgICAgIHNvdXJjZXM6IFsgc291cmNlVG9TdG9yZSBdLFxuICAgICAgdGFza3M6IHN0b3JlVGFza0RlZixcbiAgICAgIHVwbG9hZF90YWdzOiB1bmRlZmluZWQsXG4gICAgfSwge30pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlc3BlY3QgcGFzc2VkIHNlY3VyaXR5IGFuZCBwb2xpY3knLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZmFrZVNlY3VyaXR5ID0ge1xuICAgICAgc2lnbmF0dXJlOiAnZmFrZVMnLFxuICAgICAgcG9saWN5OiAnZmFrZVAnLFxuICAgIH07XG5cbiAgICBhd2FpdCBzdG9yZVVSTCh7IHNlc3Npb246IG1vY2tlZFNlc3Npb24sIHVybDogc291cmNlVG9TdG9yZSwgc2VjdXJpdHk6IGZha2VTZWN1cml0eSB9KTtcblxuICAgIGV4cGVjdChGaWxlbGluay5wcm90b3R5cGUuc2VjdXJpdHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGZha2VTZWN1cml0eSk7XG5cbiAgICBleHBlY3QoRnNSZXF1ZXN0LnBvc3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGAke21vY2tlZFNlc3Npb24udXJscy5wcm9jZXNzVXJsfS9wcm9jZXNzYCwge1xuICAgICAgYXBpa2V5OiBtb2NrZWRTZXNzaW9uLmFwaWtleSxcbiAgICAgIHNvdXJjZXM6IFsgc291cmNlVG9TdG9yZSBdLFxuICAgICAgdGFza3M6IHN0b3JlVGFza0RlZixcbiAgICAgIHVwbG9hZF90YWdzOiB1bmRlZmluZWQsXG4gICAgfSwge30pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGVycm9yIG9uIHdyb25nIHN0b3JlIHBhcmFtcycsICgpID0+IHtcbiAgICByZXR1cm4gZXhwZWN0KHN0b3JlVVJMKHtcbiAgICAgIHNlc3Npb246IG1vY2tlZFNlc3Npb24sXG4gICAgICB1cmw6IHNvdXJjZVRvU3RvcmUsXG4gICAgICBzdG9yZVBhcmFtczoge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRlc3Q6IDEyMyxcbiAgICAgIH0sXG4gICAgfSkpLnJlamVjdHMudG9FcXVhbChleHBlY3QuYW55KEZpbGVzdGFja0Vycm9yKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVzcGVjdCB0b2tlbiBjYW5jZWwnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gc2ltdWxhdGUgb2xkIHRva2VuXG4gICAgY29uc3QgdG9rZW4gPSB7XG4gICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2NhbmNlbCBtZXRob2QnKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGF3YWl0IHN0b3JlVVJMKHtcbiAgICAgIHNlc3Npb246IG1vY2tlZFNlc3Npb24sXG4gICAgICB1cmw6IHNvdXJjZVRvU3RvcmUsXG4gICAgICB0b2tlbixcbiAgICB9KTtcblxuICAgIGV4cGVjdChGc1JlcXVlc3QucG9zdCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoYCR7bW9ja2VkU2Vzc2lvbi51cmxzLnByb2Nlc3NVcmx9L3Byb2Nlc3NgLCB7XG4gICAgICBhcGlrZXk6IG1vY2tlZFNlc3Npb24uYXBpa2V5LFxuICAgICAgc291cmNlczogWyBzb3VyY2VUb1N0b3JlIF0sXG4gICAgICB0YXNrczogc3RvcmVUYXNrRGVmLFxuICAgICAgdXBsb2FkX3RhZ3M6IHVuZGVmaW5lZCxcblxuICAgICAgLy8gZXhwZWN0LmFueShGc0NhbmNlbFRva2VuKSBpcyBub3Qgd29ya2luZyBjb3JyZWN0bHkgd2l0aCBtb2NrZWQgZnVuY3Rpb25zXG4gICAgfSwgeyBjYW5jZWxUb2tlbjogZXhwZWN0LmFueShPYmplY3QpIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgdXBsb2FkIHRhZ3MgdG8gcmVxdWVzdCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1cGxvYWRUYWdzID0geyB0ZXN0OiAnMTIzJyB9O1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgc3RvcmVVUkwoe1xuICAgICAgc2Vzc2lvbjogbW9ja2VkU2Vzc2lvbixcbiAgICAgIHVybDogc291cmNlVG9TdG9yZSxcbiAgICAgIHVwbG9hZFRhZ3MsXG4gICAgfSk7XG5cbiAgICBleHBlY3QoRnNSZXF1ZXN0LnBvc3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGAke21vY2tlZFNlc3Npb24udXJscy5wcm9jZXNzVXJsfS9wcm9jZXNzYCwge1xuICAgICAgYXBpa2V5OiBtb2NrZWRTZXNzaW9uLmFwaWtleSxcbiAgICAgIHNvdXJjZXM6IFsgc291cmNlVG9TdG9yZSBdLFxuICAgICAgdGFza3M6IHN0b3JlVGFza0RlZixcbiAgICAgIHVwbG9hZF90YWdzOiB1cGxvYWRUYWdzLFxuICAgIH0sIHt9KTtcblxuICAgIGV4cGVjdChyZXMudXBsb2FkVGFncykudG9FcXVhbCh1cGxvYWRUYWdzKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIG1pc3NpbmcgdXJsJywgKCkgPT4ge1xuICAgIHJldHVybiBleHBlY3Qoc3RvcmVVUkwoeyBzZXNzaW9uOiBtb2NrZWRTZXNzaW9uIH0pKS5yZWplY3RzLnRvRXF1YWwoZXhwZWN0LmFueShGaWxlc3RhY2tFcnJvcikpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IG9uIG1pc3NpbmcgaGFuZGxlIGluIHJlc3BvbnNlJywgKCkgPT4ge1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIEZzUmVxdWVzdC5wb3N0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgZGF0YToge30sXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIGV4cGVjdChzdG9yZVVSTCh7XG4gICAgICBzZXNzaW9uOiBtb2NrZWRTZXNzaW9uLFxuICAgICAgdXJsOiBzb3VyY2VUb1N0b3JlLFxuICAgIH0pKS5yZWplY3RzLnRvRXF1YWwoZXhwZWN0LmFueShGaWxlc3RhY2tFcnJvcikpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gcnVuIHN0b3JlVXJsIHdpdGggd29ya2Zsb3dzJywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHN0b3JlVVJMKHtcbiAgICAgIHNlc3Npb246IG1vY2tlZFNlc3Npb24sXG4gICAgICB1cmw6IHNvdXJjZVRvU3RvcmUsXG4gICAgICB3b3JrZmxvd0lkcyxcbiAgICB9KTtcblxuICAgIGV4cGVjdChGc1JlcXVlc3QucG9zdCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoYCR7bW9ja2VkU2Vzc2lvbi51cmxzLnByb2Nlc3NVcmx9L3Byb2Nlc3NgLCB7XG4gICAgICBhcGlrZXk6IG1vY2tlZFNlc3Npb24uYXBpa2V5LFxuICAgICAgc291cmNlczogWyBzb3VyY2VUb1N0b3JlIF0sXG4gICAgICB0YXNrczogc3RvcmVUYXNrRGVmV2l0aFdvcmtmbG93cyxcbiAgICB9LCB7fSk7XG4gIH0pO1xuXG59KTtcbiJdfQ==
;