UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

124 lines (122 loc) 15.5 kB
"use strict"; /* * 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 }); exports.Prefetch = exports.PrefetchEvents = void 0; var tslib_1 = require("tslib"); // import Debug from 'debug'; var filestack_error_1 = require("./../../filestack_error"); var client_1 = require("./../client"); var request_1 = require("../request"); var utils_1 = require("./../utils"); var lodash_clonedeep_1 = tslib_1.__importDefault(require("lodash.clonedeep")); var PrefetchEvents; (function (PrefetchEvents) { PrefetchEvents["PICKER"] = "picker"; PrefetchEvents["TRANSFORM_UI"] = "transform_ui"; })(PrefetchEvents = exports.PrefetchEvents || (exports.PrefetchEvents = {})); /** * @private */ var Prefetch = /** @class */ (function () { function Prefetch(param) { if (param instanceof client_1.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 tslib_1.__awaiter(this, void 0, void 0, function () { var paramsToSend, pickerOptionsToSend; var _this = this; return tslib_1.__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 = (0, utils_1.cleanUpCallbacks)((0, lodash_clonedeep_1.default)(tslib_1.__assign({}, pickerOptions))); } paramsToSend = tslib_1.__assign(tslib_1.__assign({}, paramsToSend), { permissions: permissions, settings: settings, picker_config: pickerOptionsToSend, events: events }); this.session.prefetch = null; return [2 /*return*/, request_1.FsRequest.post("".concat(this.session.urls.uploadApiUrl, "/prefetch"), paramsToSend).then(function (res) { /* istanbul ignore if */ if (res.status !== 200) { throw new filestack_error_1.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; }()); exports.Prefetch = Prefetch; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpL3ByZWZldGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7Ozs7QUFFSCw2QkFBNkI7QUFDN0IsMkRBQXlEO0FBQ3pELHNDQUF3RDtBQUV4RCxzQ0FBdUM7QUFDdkMsb0NBQThDO0FBQzlDLDhFQUF5QztBQWdCekMsSUFBWSxjQUdYO0FBSEQsV0FBWSxjQUFjO0lBQ3hCLG1DQUFpQixDQUFBO0lBQ2pCLCtDQUE2QixDQUFBO0FBQy9CLENBQUMsRUFIVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQUd6QjtBQXlCRDs7R0FFRztBQUNIO0lBSUUsa0JBQVksS0FBdUI7UUFDakMsSUFBSSxLQUFLLFlBQVksZUFBTSxFQUFFO1lBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUM5QjthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNHLDRCQUFTLEdBQWYsVUFBZ0IsRUFBaUU7WUFBL0QsYUFBYSxtQkFBQSxFQUFFLFFBQVEsY0FBQSxFQUFFLFdBQVcsaUJBQUEsRUFBRSxNQUFNLFlBQUE7Ozs7O2dCQUN4RCxZQUFZLEdBQW9CO29CQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2lCQUM1QixDQUFDO2dCQUVGLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7b0JBQ2pELFlBQVksQ0FBQyxRQUFRLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQzVGO2dCQUVELHlDQUF5QztnQkFDekMsd0lBQXdJO2dCQUN4SSxJQUFJO2dCQUVKLG1EQUFt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cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2suXG4gKiBTb21lIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gaW1wb3J0IERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IEZpbGVzdGFja0Vycm9yIH0gZnJvbSAnLi8uLi8uLi9maWxlc3RhY2tfZXJyb3InO1xuaW1wb3J0IHsgU2Vzc2lvbiwgU2VjdXJpdHksIENsaWVudCB9IGZyb20gJy4vLi4vY2xpZW50JztcbmltcG9ydCB7IFBpY2tlck9wdGlvbnMgfSBmcm9tICcuLy4uL3BpY2tlcic7XG5pbXBvcnQgeyBGc1JlcXVlc3QgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IGNsZWFuVXBDYWxsYmFja3MgfSBmcm9tICcuLy4uL3V0aWxzJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoLmNsb25lZGVlcCc7XG5cbi8vIGNvbnN0IGRlYnVnID0gRGVidWcoJ2ZzOnByZWZldGNoJyk7XG5cbmV4cG9ydCB0eXBlIFByZWZldGNoU2V0dGluZ3MgPSB7XG4gIGluYXBwX2Jyb3dzZXI/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUHJlZmV0Y2hQZXJtaXNzaW9ucyA9IHtcbiAgaW50ZWxsaWdlbnRfaW5nZXN0aW9uPzogYm9vbGVhbjtcbiAgd2hpdGVsYWJlbD86IGJvb2xlYW47XG4gIHRyYW5zZm9ybXNfdWk/OiBib29sZWFuO1xuICBlbmhhbmNlPzogYm9vbGVhbjtcbiAgYWR2YW5jZWRfZW5oYW5jZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZW51bSBQcmVmZXRjaEV2ZW50cyB7XG4gIFBJQ0tFUiA9ICdwaWNrZXInLFxuICBUUkFOU0ZPUk1fVUkgPSAndHJhbnNmb3JtX3VpJyxcbn1cblxuZXhwb3J0IHR5cGUgUHJlZmV0Y2hPcHRpb25zID0ge1xuICBwaWNrZXJPcHRpb25zPzogUGlja2VyT3B0aW9ucztcbiAgc2V0dGluZ3M/OiBBcnJheTxrZXlvZiBQcmVmZXRjaFNldHRpbmdzPjtcbiAgcGVybWlzc2lvbnM/OiBBcnJheTxrZXlvZiBQcmVmZXRjaFBlcm1pc3Npb25zPjtcbiAgZXZlbnRzPzogUHJlZmV0Y2hFdmVudHNbXTtcbn07XG5cbmludGVyZmFjZSBQcmVmZXRjaFJlcXVlc3Qge1xuICBhcGlrZXk6IHN0cmluZztcbiAgc2VjdXJpdHk/OiBTZWN1cml0eTtcbiAgcGVybWlzc2lvbnM/OiBBcnJheTxrZXlvZiBQcmVmZXRjaFBlcm1pc3Npb25zPjtcbiAgc2V0dGluZ3M/OiBBcnJheTxrZXlvZiBQcmVmZXRjaFNldHRpbmdzPjtcbiAgZXZlbnRzPzogUHJlZmV0Y2hFdmVudHNbXTtcbiAgcGlja2VyX2NvbmZpZz86IFBpY2tlck9wdGlvbnM7XG59XG5cbmV4cG9ydCB0eXBlIFByZWZldGNoUmVzcG9uc2UgPSB7XG4gIGJsb2NrZWQ/OiBib29sZWFuIHwgc3RyaW5nO1xuICBzZXR0aW5ncz86IFByZWZldGNoU2V0dGluZ3M7XG4gIHBlcm1pc3Npb25zPzogUHJlZmV0Y2hQZXJtaXNzaW9ucztcbiAgcGlja2VyT3B0aW9uczogUGlja2VyT3B0aW9ucztcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFByZWZldGNoIHtcblxuICBwcml2YXRlIHNlc3Npb246IFNlc3Npb247XG5cbiAgY29uc3RydWN0b3IocGFyYW06IFNlc3Npb24gfCBDbGllbnQpIHtcbiAgICBpZiAocGFyYW0gaW5zdGFuY2VvZiBDbGllbnQpIHtcbiAgICAgIHRoaXMuc2Vzc2lvbiA9IHBhcmFtLnNlc3Npb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2Vzc2lvbiA9IHBhcmFtO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGZpbGVzdGFjayBvcHRpb25zIGZyb20gYmFja2VuZCBhY2NvcmRpbmcgdG8gaW5wdXQgcGFyYW1zXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbTBcbiAgICovXG4gIGFzeW5jIGdldENvbmZpZyh7IHBpY2tlck9wdGlvbnMsIHNldHRpbmdzLCBwZXJtaXNzaW9ucywgZXZlbnRzIH06IFByZWZldGNoT3B0aW9ucyk6IFByb21pc2U8UHJlZmV0Y2hSZXNwb25zZT4ge1xuICAgIGxldCBwYXJhbXNUb1NlbmQ6IFByZWZldGNoUmVxdWVzdCA9IHtcbiAgICAgIGFwaWtleTogdGhpcy5zZXNzaW9uLmFwaWtleSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc2Vzc2lvbi5wb2xpY3kgJiYgdGhpcy5zZXNzaW9uLnNpZ25hdHVyZSkge1xuICAgICAgcGFyYW1zVG9TZW5kLnNlY3VyaXR5ID0geyBwb2xpY3k6IHRoaXMuc2Vzc2lvbi5wb2xpY3ksIHNpZ25hdHVyZTogdGhpcy5zZXNzaW9uLnNpZ25hdHVyZSB9O1xuICAgIH1cblxuICAgIC8vIGlmICh0aGlzLnNlc3Npb24ucHJlZmV0Y2ggJiYgZXZlbnRzKSB7XG4gICAgLy8gICByZXR1cm4gRnNSZXF1ZXN0LnBvc3QoYCR7dGhpcy5zZXNzaW9uLnVybHMudXBsb2FkQXBpVXJsfS9wcmVmZXRjaGAsIHsgLi4ucGFyYW1zVG9TZW5kLCBldmVudHMgfSkudGhlbigoKSA9PiB0aGlzLnNlc3Npb24ucHJlZmV0Y2gpO1xuICAgIC8vIH1cblxuICAgIC8vIHdlIHNob3VsZCBhbHdheXMgYXNrIGZvciB0aGlzIHNldHRpbmcgZm9yIHBpY2tlclxuICAgIGlmICghc2V0dGluZ3MpIHtcbiAgICAgIHNldHRpbmdzID0gWydpbmFwcF9icm93c2VyJ107XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldHRpbmdzID0gc2V0dGluZ3MuY29uY2F0KFsnaW5hcHBfYnJvd3NlciddKTtcbiAgICAgIC8vIG1ha2UgYXJycmF5IHVuaXF1ZVxuICAgICAgc2V0dGluZ3MgPSBzZXR0aW5ncy5maWx0ZXIoKHYsIGkpID0+IHNldHRpbmdzLmluZGV4T2YodikgPT09IGkpO1xuICAgIH1cblxuICAgIGxldCBwaWNrZXJPcHRpb25zVG9TZW5kO1xuICAgIGlmIChwaWNrZXJPcHRpb25zICYmIE9iamVjdC5rZXlzKHBpY2tlck9wdGlvbnMpLmxlbmd0aCkge1xuICAgICAgcGlja2VyT3B0aW9uc1RvU2VuZCA9IGNsZWFuVXBDYWxsYmFja3MoY2xvbmVEZWVwKHsgLi4ucGlja2VyT3B0aW9ucyB9KSk7XG4gICAgfVxuXG4gICAgcGFyYW1zVG9TZW5kID0ge1xuICAgICAgLi4ucGFyYW1zVG9TZW5kLFxuICAgICAgcGVybWlzc2lvbnMsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIHBpY2tlcl9jb25maWc6IHBpY2tlck9wdGlvbnNUb1NlbmQsXG4gICAgICBldmVudHMsXG4gICAgfTtcblxuICAgIHRoaXMuc2Vzc2lvbi5wcmVmZXRjaCA9IG51bGw7XG5cbiAgICByZXR1cm4gRnNSZXF1ZXN0LnBvc3QoYCR7dGhpcy5zZXNzaW9uLnVybHMudXBsb2FkQXBpVXJsfS9wcmVmZXRjaGAsIHBhcmFtc1RvU2VuZCkudGhlbigocmVzKSA9PiB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChyZXMuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEZpbGVzdGFja0Vycm9yKCdUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCBwcmVmZXRjaCByZXF1ZXN0Jyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhID0gcmVzLmRhdGE7XG5cbiAgICAgIC8vIGlmIGJhY2tlbmQgbm90IHJldHVybmluZyB1cGRhdGVkX2NvbmZpZyBjYXkgd2UgdGFrZSBvbGQgY29uZmlnIGFuZCByZXR1cm5cbiAgICAgIGlmIChkYXRhLnVwZGF0ZWRfY29uZmlnKSB7XG4gICAgICAgIC8vIHJlYXNzaWduIGNhbGxiYWNrIGZyb20gb2xkIGNvbmZpZyB0byBuZXcgb25lIHJldHVybmVkIGZyb20gYmFja2VuZFxuICAgICAgICBkYXRhLnBpY2tlck9wdGlvbnMgPSB0aGlzLnJlYXNzaWduQ2FsbGJhY2tzKHBpY2tlck9wdGlvbnMsIGRhdGEudXBkYXRlZF9jb25maWcgfHwge30pO1xuICAgICAgICBkZWxldGUgZGF0YS51cGRhdGVkX2NvbmZpZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEucGlja2VyT3B0aW9ucyA9IHBpY2tlck9wdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Vzc2lvbi5wcmVmZXRjaCA9IGRhdGE7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYXNzaWduIGNhbGxiYWNrcyBmcm9tIG9sZCBwaWNrZXIgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gb2JqT2xkXG4gICAqIEBwYXJhbSBvYmpUYXJnZXRcbiAgICovXG4gIHByaXZhdGUgcmVhc3NpZ25DYWxsYmFja3Mob2JqT2xkLCBvYmpUYXJnZXQpIHtcbiAgICBpZiAoIW9iak9sZCB8fCBPYmplY3Qua2V5cyhvYmpPbGQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9iak9sZDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGsgaW4gb2JqT2xkKSB7XG4gICAgICBpZiAodHlwZW9mIG9iak9sZFtrXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvYmpUYXJnZXRba10gPSBvYmpPbGRba107XG4gICAgICB9XG5cbiAgICAgIGlmIChvYmpPbGRba10gPT09IE9iamVjdChvYmpPbGRba10pKSB7XG4gICAgICAgIG9ialRhcmdldFtrXSA9IHRoaXMucmVhc3NpZ25DYWxsYmFja3Mob2JqT2xkW2tdLCBvYmpUYXJnZXRba10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmpUYXJnZXQ7XG4gIH1cbn1cbiJdfQ==