UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

121 lines (119 loc) 15.4 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 Debug from 'debug'; import { FilestackError } from './../../filestack_error'; import { Client } from './../client'; import { FsRequest } from '../request'; import { cleanUpCallbacks } from './../utils'; import cloneDeep from 'lodash.clonedeep'; export var PrefetchEvents; (function (PrefetchEvents) { PrefetchEvents["PICKER"] = "picker"; PrefetchEvents["TRANSFORM_UI"] = "transform_ui"; })(PrefetchEvents || (PrefetchEvents = {})); /** * @private */ var Prefetch = /** @class */ (function () { function Prefetch(param) { if (param instanceof Client) { this.session = param.session; } else { this.session = param; } } /** * Returns filestack options from backend according to input params * * @param param0 */ Prefetch.prototype.getConfig = function (_a) { var pickerOptions = _a.pickerOptions, settings = _a.settings, permissions = _a.permissions, events = _a.events; return __awaiter(this, void 0, void 0, function () { var paramsToSend, pickerOptionsToSend; var _this = this; return __generator(this, function (_b) { paramsToSend = { apikey: this.session.apikey, }; if (this.session.policy && this.session.signature) { paramsToSend.security = { policy: this.session.policy, signature: this.session.signature }; } // if (this.session.prefetch && events) { // return FsRequest.post(`${this.session.urls.uploadApiUrl}/prefetch`, { ...paramsToSend, events }).then(() => this.session.prefetch); // } // we should always ask for this setting for picker if (!settings) { settings = ['inapp_browser']; } else { settings = settings.concat(['inapp_browser']); // make arrray unique settings = settings.filter(function (v, i) { return settings.indexOf(v) === i; }); } if (pickerOptions && Object.keys(pickerOptions).length) { pickerOptionsToSend = cleanUpCallbacks(cloneDeep(__assign({}, pickerOptions))); } paramsToSend = __assign(__assign({}, paramsToSend), { permissions: permissions, settings: settings, picker_config: pickerOptionsToSend, events: events }); this.session.prefetch = null; return [2 /*return*/, FsRequest.post("".concat(this.session.urls.uploadApiUrl, "/prefetch"), paramsToSend).then(function (res) { /* istanbul ignore if */ if (res.status !== 200) { throw new FilestackError('There is a problem with prefetch request'); } var data = res.data; // if backend not returning updated_config cay we take old config and return if (data.updated_config) { // reassign callback from old config to new one returned from backend data.pickerOptions = _this.reassignCallbacks(pickerOptions, data.updated_config || {}); delete data.updated_config; } else { data.pickerOptions = pickerOptions; } _this.session.prefetch = data; return data; })]; }); }); }; /** * Reassign callbacks from old picker configuration * * @param objOld * @param objTarget */ Prefetch.prototype.reassignCallbacks = function (objOld, objTarget) { if (!objOld || Object.keys(objOld).length === 0) { return objOld; } for (var k in objOld) { if (typeof objOld[k] === 'function') { objTarget[k] = objOld[k]; } if (objOld[k] === Object(objOld[k])) { objTarget[k] = this.reassignCallbacks(objOld[k], objTarget[k]); } } return objTarget; }; return Prefetch; }()); export { Prefetch }; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpL3ByZWZldGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSCw2QkFBNkI7QUFDN0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBcUIsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBZ0J6QyxNQUFNLENBQU4sSUFBWSxjQUdYO0FBSEQsV0FBWSxjQUFjO0lBQ3hCLG1DQUFpQixDQUFBO0lBQ2pCLCtDQUE2QixDQUFBO0FBQy9CLENBQUMsRUFIVyxjQUFjLEtBQWQsY0FBYyxRQUd6QjtBQXlCRDs7R0FFRztBQUNIO0lBSUUsa0JBQVksS0FBdUI7UUFDakMsSUFBSSxLQUFLLFlBQVksTUFBTSxFQUFFO1lBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUM5QjthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNHLDRCQUFTLEdBQWYsVUFBZ0IsRUFBaUU7WUFBL0QsYUFBYSxtQkFBQSxFQUFFLFFBQVEsY0FBQSxFQUFFLFdBQVcsaUJBQUEsRUFBRSxNQUFNLFlBQUE7Ozs7O2dCQUN4RCxZQUFZLEdBQW9CO29CQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2lCQUM1QixDQUFDO2dCQUVGLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7b0JBQ2pELFlBQVksQ0FBQyxRQUFRLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQzVGO2dCQUVELHlDQUF5QztnQkFDekMsd0lBQXdJO2dCQUN4SSxJQUFJO2dCQUVKLG1EQUFtRDtnQkFDbkQsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDYixRQUFRLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDOUI7cUJBQU07b0JBQ0wsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUM5QyxxQkFBcUI7b0JBQ3JCLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUF6QixDQUF5QixDQUFDLENBQUM7aUJBQ2pFO2dCQUdELElBQUksYUFBYSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxFQUFFO29CQUN0RCxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLGNBQU0sYUFBYSxFQUFHLENBQUMsQ0FBQztpQkFDekU7Z0JBRUQsWUFBWSx5QkFDUCxZQUFZLEtBQ2YsV0FBVyxhQUFBLEVBQ1gsUUFBUSxVQUFBLEVBQ1IsYUFBYSxFQUFFLG1CQUFtQixFQUNsQyxNQUFNLFFBQUEsR0FDUCxDQUFDO2dCQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFFN0Isc0JBQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksY0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUc7d0JBQ3pGLHdCQUF3Qjt3QkFDeEIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDdEIsTUFBTSxJQUFJLGNBQWMsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO3lCQUN0RTt3QkFFRCxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO3dCQUVwQiw0RUFBNEU7d0JBQzVFLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTs0QkFDdkIscUVBQXFFOzRCQUNyRSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQzs0QkFDdEYsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO3lCQUM1Qjs2QkFBTTs0QkFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQzt5QkFDcEM7d0JBRUQsS0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3dCQUU3QixPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDLENBQUMsRUFBQzs7O0tBQ0o7SUFFRDs7Ozs7T0FLRztJQUNLLG9DQUFpQixHQUF6QixVQUEwQixNQUFNLEVBQUUsU0FBUztRQUN6QyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMvQyxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBRUQsS0FBSyxJQUFNLENBQUMsSUFBSSxNQUFNLEVBQUU7WUFDdEIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLEVBQUU7Z0JBQ25DLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDMUI7WUFFRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25DLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hFO1NBQ0Y7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0gsZUFBQztBQUFELENBcEdBLEFBb0dDLElBQUEiLCJmaWxlIjoibGliL2FwaS9wcmVmZXRjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrLlxuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIGltcG9ydCBEZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyBGaWxlc3RhY2tFcnJvciB9IGZyb20gJy4vLi4vLi4vZmlsZXN0YWNrX2Vycm9yJztcbmltcG9ydCB7IFNlc3Npb24sIFNlY3VyaXR5LCBDbGllbnQgfSBmcm9tICcuLy4uL2NsaWVudCc7XG5pbXBvcnQgeyBQaWNrZXJPcHRpb25zIH0gZnJvbSAnLi8uLi9waWNrZXInO1xuaW1wb3J0IHsgRnNSZXF1ZXN0IH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgeyBjbGVhblVwQ2FsbGJhY2tzIH0gZnJvbSAnLi8uLi91dGlscyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC5jbG9uZWRlZXAnO1xuXG4vLyBjb25zdCBkZWJ1ZyA9IERlYnVnKCdmczpwcmVmZXRjaCcpO1xuXG5leHBvcnQgdHlwZSBQcmVmZXRjaFNldHRpbmdzID0ge1xuICBpbmFwcF9icm93c2VyPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFByZWZldGNoUGVybWlzc2lvbnMgPSB7XG4gIGludGVsbGlnZW50X2luZ2VzdGlvbj86IGJvb2xlYW47XG4gIHdoaXRlbGFiZWw/OiBib29sZWFuO1xuICB0cmFuc2Zvcm1zX3VpPzogYm9vbGVhbjtcbiAgZW5oYW5jZT86IGJvb2xlYW47XG4gIGFkdmFuY2VkX2VuaGFuY2U/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGVudW0gUHJlZmV0Y2hFdmVudHMge1xuICBQSUNLRVIgPSAncGlja2VyJyxcbiAgVFJBTlNGT1JNX1VJID0gJ3RyYW5zZm9ybV91aScsXG59XG5cbmV4cG9ydCB0eXBlIFByZWZldGNoT3B0aW9ucyA9IHtcbiAgcGlja2VyT3B0aW9ucz86IFBpY2tlck9wdGlvbnM7XG4gIHNldHRpbmdzPzogQXJyYXk8a2V5b2YgUHJlZmV0Y2hTZXR0aW5ncz47XG4gIHBlcm1pc3Npb25zPzogQXJyYXk8a2V5b2YgUHJlZmV0Y2hQZXJtaXNzaW9ucz47XG4gIGV2ZW50cz86IFByZWZldGNoRXZlbnRzW107XG59O1xuXG5pbnRlcmZhY2UgUHJlZmV0Y2hSZXF1ZXN0IHtcbiAgYXBpa2V5OiBzdHJpbmc7XG4gIHNlY3VyaXR5PzogU2VjdXJpdHk7XG4gIHBlcm1pc3Npb25zPzogQXJyYXk8a2V5b2YgUHJlZmV0Y2hQZXJtaXNzaW9ucz47XG4gIHNldHRpbmdzPzogQXJyYXk8a2V5b2YgUHJlZmV0Y2hTZXR0aW5ncz47XG4gIGV2ZW50cz86IFByZWZldGNoRXZlbnRzW107XG4gIHBpY2tlcl9jb25maWc/OiBQaWNrZXJPcHRpb25zO1xufVxuXG5leHBvcnQgdHlwZSBQcmVmZXRjaFJlc3BvbnNlID0ge1xuICBibG9ja2VkPzogYm9vbGVhbiB8IHN0cmluZztcbiAgc2V0dGluZ3M/OiBQcmVmZXRjaFNldHRpbmdzO1xuICBwZXJtaXNzaW9ucz86IFByZWZldGNoUGVybWlzc2lvbnM7XG4gIHBpY2tlck9wdGlvbnM6IFBpY2tlck9wdGlvbnM7XG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQcmVmZXRjaCB7XG5cbiAgcHJpdmF0ZSBzZXNzaW9uOiBTZXNzaW9uO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtOiBTZXNzaW9uIHwgQ2xpZW50KSB7XG4gICAgaWYgKHBhcmFtIGluc3RhbmNlb2YgQ2xpZW50KSB7XG4gICAgICB0aGlzLnNlc3Npb24gPSBwYXJhbS5zZXNzaW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlc3Npb24gPSBwYXJhbTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBmaWxlc3RhY2sgb3B0aW9ucyBmcm9tIGJhY2tlbmQgYWNjb3JkaW5nIHRvIGlucHV0IHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0gcGFyYW0wXG4gICAqL1xuICBhc3luYyBnZXRDb25maWcoeyBwaWNrZXJPcHRpb25zLCBzZXR0aW5ncywgcGVybWlzc2lvbnMsIGV2ZW50cyB9OiBQcmVmZXRjaE9wdGlvbnMpOiBQcm9taXNlPFByZWZldGNoUmVzcG9uc2U+IHtcbiAgICBsZXQgcGFyYW1zVG9TZW5kOiBQcmVmZXRjaFJlcXVlc3QgPSB7XG4gICAgICBhcGlrZXk6IHRoaXMuc2Vzc2lvbi5hcGlrZXksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNlc3Npb24ucG9saWN5ICYmIHRoaXMuc2Vzc2lvbi5zaWduYXR1cmUpIHtcbiAgICAgIHBhcmFtc1RvU2VuZC5zZWN1cml0eSA9IHsgcG9saWN5OiB0aGlzLnNlc3Npb24ucG9saWN5LCBzaWduYXR1cmU6IHRoaXMuc2Vzc2lvbi5zaWduYXR1cmUgfTtcbiAgICB9XG5cbiAgICAvLyBpZiAodGhpcy5zZXNzaW9uLnByZWZldGNoICYmIGV2ZW50cykge1xuICAgIC8vICAgcmV0dXJuIEZzUmVxdWVzdC5wb3N0KGAke3RoaXMuc2Vzc2lvbi51cmxzLnVwbG9hZEFwaVVybH0vcHJlZmV0Y2hgLCB7IC4uLnBhcmFtc1RvU2VuZCwgZXZlbnRzIH0pLnRoZW4oKCkgPT4gdGhpcy5zZXNzaW9uLnByZWZldGNoKTtcbiAgICAvLyB9XG5cbiAgICAvLyB3ZSBzaG91bGQgYWx3YXlzIGFzayBmb3IgdGhpcyBzZXR0aW5nIGZvciBwaWNrZXJcbiAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICBzZXR0aW5ncyA9IFsnaW5hcHBfYnJvd3NlciddO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXR0aW5ncyA9IHNldHRpbmdzLmNvbmNhdChbJ2luYXBwX2Jyb3dzZXInXSk7XG4gICAgICAvLyBtYWtlIGFycnJheSB1bmlxdWVcbiAgICAgIHNldHRpbmdzID0gc2V0dGluZ3MuZmlsdGVyKCh2LCBpKSA9PiBzZXR0aW5ncy5pbmRleE9mKHYpID09PSBpKTtcbiAgICB9XG5cbiAgICBsZXQgcGlja2VyT3B0aW9uc1RvU2VuZDtcbiAgICBpZiAocGlja2VyT3B0aW9ucyAmJiBPYmplY3Qua2V5cyhwaWNrZXJPcHRpb25zKS5sZW5ndGgpIHtcbiAgICAgIHBpY2tlck9wdGlvbnNUb1NlbmQgPSBjbGVhblVwQ2FsbGJhY2tzKGNsb25lRGVlcCh7IC4uLnBpY2tlck9wdGlvbnMgfSkpO1xuICAgIH1cblxuICAgIHBhcmFtc1RvU2VuZCA9IHtcbiAgICAgIC4uLnBhcmFtc1RvU2VuZCxcbiAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgc2V0dGluZ3MsXG4gICAgICBwaWNrZXJfY29uZmlnOiBwaWNrZXJPcHRpb25zVG9TZW5kLFxuICAgICAgZXZlbnRzLFxuICAgIH07XG5cbiAgICB0aGlzLnNlc3Npb24ucHJlZmV0Y2ggPSBudWxsO1xuXG4gICAgcmV0dXJuIEZzUmVxdWVzdC5wb3N0KGAke3RoaXMuc2Vzc2lvbi51cmxzLnVwbG9hZEFwaVVybH0vcHJlZmV0Y2hgLCBwYXJhbXNUb1NlbmQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBGaWxlc3RhY2tFcnJvcignVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggcHJlZmV0Y2ggcmVxdWVzdCcpO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YSA9IHJlcy5kYXRhO1xuXG4gICAgICAvLyBpZiBiYWNrZW5kIG5vdCByZXR1cm5pbmcgdXBkYXRlZF9jb25maWcgY2F5IHdlIHRha2Ugb2xkIGNvbmZpZyBhbmQgcmV0dXJuXG4gICAgICBpZiAoZGF0YS51cGRhdGVkX2NvbmZpZykge1xuICAgICAgICAvLyByZWFzc2lnbiBjYWxsYmFjayBmcm9tIG9sZCBjb25maWcgdG8gbmV3IG9uZSByZXR1cm5lZCBmcm9tIGJhY2tlbmRcbiAgICAgICAgZGF0YS5waWNrZXJPcHRpb25zID0gdGhpcy5yZWFzc2lnbkNhbGxiYWNrcyhwaWNrZXJPcHRpb25zLCBkYXRhLnVwZGF0ZWRfY29uZmlnIHx8IHt9KTtcbiAgICAgICAgZGVsZXRlIGRhdGEudXBkYXRlZF9jb25maWc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhLnBpY2tlck9wdGlvbnMgPSBwaWNrZXJPcHRpb25zO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNlc3Npb24ucHJlZmV0Y2ggPSBkYXRhO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFzc2lnbiBjYWxsYmFja3MgZnJvbSBvbGQgcGlja2VyIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIG9iak9sZFxuICAgKiBAcGFyYW0gb2JqVGFyZ2V0XG4gICAqL1xuICBwcml2YXRlIHJlYXNzaWduQ2FsbGJhY2tzKG9iak9sZCwgb2JqVGFyZ2V0KSB7XG4gICAgaWYgKCFvYmpPbGQgfHwgT2JqZWN0LmtleXMob2JqT2xkKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvYmpPbGQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrIGluIG9iak9sZCkge1xuICAgICAgaWYgKHR5cGVvZiBvYmpPbGRba10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JqVGFyZ2V0W2tdID0gb2JqT2xkW2tdO1xuICAgICAgfVxuXG4gICAgICBpZiAob2JqT2xkW2tdID09PSBPYmplY3Qob2JqT2xkW2tdKSkge1xuICAgICAgICBvYmpUYXJnZXRba10gPSB0aGlzLnJlYXNzaWduQ2FsbGJhY2tzKG9iak9sZFtrXSwgb2JqVGFyZ2V0W2tdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqVGFyZ2V0O1xuICB9XG59XG4iXX0=