filestack-js
Version:
Official JavaScript library for Filestack
121 lines (119 loc) • 15.4 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.
*/
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpL3ByZWZldGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSCw2QkFBNkI7QUFDN0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBcUIsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBZ0J6QyxNQUFNLENBQU4sSUFBWSxjQUdYO0FBSEQsV0FBWSxjQUFjO0lBQ3hCLG1DQUFpQixDQUFBO0lBQ2pCLCtDQUE2QixDQUFBO0FBQy9CLENBQUMsRUFIVyxjQUFjLEtBQWQsY0FBYyxRQUd6QjtBQXlCRDs7R0FFRztBQUNIO0lBSUUsa0JBQVksS0FBdUI7UUFDakMsSUFBSSxLQUFLLFlBQVksTUFBTSxFQUFFO1lBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUM5QjthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNHLDRCQUFTLEdBQWYsVUFBZ0IsRUFBaUU7WUFBL0QsYUFBYSxtQkFBQSxFQUFFLFFBQVEsY0FBQSxFQUFFLFdBQVcsaUJBQUEsRUFBRSxNQUFNLFlBQUE7Ozs7O2dCQUN4RCxZQUFZLEdBQW9CO29CQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2lCQUM1QixDQUFDO2dCQUVGLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7b0JBQ2pELFlBQVksQ0FBQyxRQUFRLEdBQUcsRUFBRSxNQUFNLEVBQUUs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Q2hFO1NBQ0Y7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0gsZUFBQztBQUFELENBcEdBLEFBb0dDLElBQUEiLCJmaWxlIjoibGliL2FwaS9wcmVmZXRjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrLlxuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIGltcG9ydCBEZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyBGaWxlc3RhY2tFcnJvciB9IGZyb20gJy4vLi4vLi4vZmlsZXN0YWNrX2Vycm9yJztcbmltcG9ydCB7IFNlc3Npb24sIFNlY3VyaXR5LCBDbGllbnQgfSBmcm9tICcuLy4uL2NsaWVudCc7XG5pbXBvcnQgeyBQaWNrZXJPcHRpb25zIH0gZnJvbSAnLi8uLi9waWNrZXInO1xuaW1wb3J0IHsgRnNSZXF1ZXN0IH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgeyBjbGVhblVwQ2FsbGJhY2tzIH0gZnJvbSAnLi8uLi91dGlscyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC5jbG9uZWRlZXAnO1xuXG4vLyBjb25zdCBkZWJ1ZyA9IERlYnVnKCdmczpwcmVmZXRjaCcpO1xuXG5leHBvcnQgdHlwZSBQcmVmZXRjaFNldHRpbmdzID0ge1xuICBpbmFwcF9icm93c2VyPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFByZWZldGNoUGVybWlzc2lvbnMgPSB7XG4gIGludGVsbGlnZW50X2luZ2VzdGlvbj86IGJvb2xlYW47XG4gIHdoaXRlbGFiZWw/OiBib29sZWFuO1xuICB0cmFuc2Zvcm1zX3VpPzogYm9vbGVhbjtcbiAgZW5oYW5jZT86IGJvb2xlYW47XG4gIGFkdmFuY2VkX2VuaGFuY2U/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGVudW0gUHJlZmV0Y2hFdmVudHMge1xuICBQSUNLRVIgPSAncGlja2VyJyxcbiAgVFJBTlNGT1JNX1VJID0gJ3RyYW5zZm9ybV91aScsXG59XG5cbmV4cG9ydCB0eXBlIFByZWZldGNoT3B0aW9ucyA9IHtcbiAgcGlja2VyT3B0aW9ucz86IFBpY2tlck9wdGlvbnM7XG4gIHNldHRpbmdzPzogQXJyYXk8a2V5b2YgUHJlZmV0Y2hTZXR0aW5ncz47XG4gIHBlcm1pc3Npb25zPzogQXJyYXk8a2V5b2YgUHJlZmV0Y2hQZXJtaXNzaW9ucz47XG4gIGV2ZW50cz86IFByZWZldGNoRXZlbnRzW107XG59O1xuXG5pbnRlcmZhY2UgUHJlZmV0Y2hSZXF1ZXN0IHtcbiAgYXBpa2V5OiBzdHJpbmc7XG4gIHNlY3VyaXR5PzogU2VjdXJpdHk7XG4gIHBlcm1pc3Npb25zPzogQXJyYXk8a2V5b2YgUHJlZmV0Y2hQZXJtaXNzaW9ucz47XG4gIHNldHRpbmdzPzogQXJyYXk8a2V5b2YgUHJlZmV0Y2hTZXR0aW5ncz47XG4gIGV2ZW50cz86IFByZWZldGNoRXZlbnRzW107XG4gIHBpY2tlcl9jb25maWc/OiBQaWNrZXJPcHRpb25zO1xufVxuXG5leHBvcnQgdHlwZSBQcmVmZXRjaFJlc3BvbnNlID0ge1xuICBibG9ja2VkPzogYm9vbGVhbiB8IHN0cmluZztcbiAgc2V0dGluZ3M/OiBQcmVmZXRjaFNldHRpbmdzO1xuICBwZXJtaXNzaW9ucz86IFByZWZldGNoUGVybWlzc2lvbnM7XG4gIHBpY2tlck9wdGlvbnM6IFBpY2tlck9wdGlvbnM7XG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQcmVmZXRjaCB7XG5cbiAgcHJpdmF0ZSBzZXNzaW9uOiBTZXNzaW9uO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtOiBTZXNzaW9uIHwgQ2xpZW50KSB7XG4gICAgaWYgKHBhcmFtIGluc3RhbmNlb2YgQ2xpZW50KSB7XG4gICAgICB0aGlzLnNlc3Npb24gPSBwYXJhbS5zZXNzaW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlc3Npb24gPSBwYXJhbTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBmaWxlc3RhY2sgb3B0aW9ucyBmcm9tIGJhY2tlbmQgYWNjb3JkaW5nIHRvIGlucHV0IHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0gcGFyYW0wXG4gICAqL1xuICBhc3luYyBnZXRDb25maWcoeyBwaWNrZXJPcHRpb25zLCBzZXR0aW5ncywgcGVybWlzc2lvbnMsIGV2ZW50cyB9OiBQcmVmZXRjaE9wdGlvbnMpOiBQcm9taXNlPFByZWZldGNoUmVzcG9uc2U+IHtcbiAgICBsZXQgcGFyYW1zVG9TZW5kOiBQcmVmZXRjaFJlcXVlc3QgPSB7XG4gICAgICBhcGlrZXk6IHRoaXMuc2Vzc2lvbi5hcGlrZXksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNlc3Npb24ucG9saWN5ICYmIHRoaXMuc2Vzc2lvbi5zaWduYXR1cmUpIHtcbiAgICAgIHBhcmFtc1RvU2VuZC5zZWN1cml0eSA9IHsgcG9saWN5OiB0aGlzLnNlc3Npb24ucG9saWN5LCBzaWduYXR1cmU6IHRoaXMuc2Vzc2lvbi5zaWduYXR1cmUgfTtcbiAgICB9XG5cbiAgICAvLyBpZiAodGhpcy5zZXNzaW9uLnByZWZldGNoICYmIGV2ZW50cykge1xuICAgIC8vICAgcmV0dXJuIEZzUmVxdWVzdC5wb3N0KGAke3RoaXMuc2Vzc2lvbi51cmxzLnVwbG9hZEFwaVVybH0vcHJlZmV0Y2hgLCB7IC4uLnBhcmFtc1RvU2VuZCwgZXZlbnRzIH0pLnRoZW4oKCkgPT4gdGhpcy5zZXNzaW9uLnByZWZldGNoKTtcbiAgICAvLyB9XG5cbiAgICAvLyB3ZSBzaG91bGQgYWx3YXlzIGFzayBmb3IgdGhpcyBzZXR0aW5nIGZvciBwaWNrZXJcbiAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICBzZXR0aW5ncyA9IFsnaW5hcHBfYnJvd3NlciddO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXR0aW5ncyA9IHNldHRpbmdzLmNvbmNhdChbJ2luYXBwX2Jyb3dzZXInXSk7XG4gICAgICAvLyBtYWtlIGFycnJheSB1bmlxdWVcbiAgICAgIHNldHRpbmdzID0gc2V0dGluZ3MuZmlsdGVyKCh2LCBpKSA9PiBzZXR0aW5ncy5pbmRleE9mKHYpID09PSBpKTtcbiAgICB9XG5cbiAgICBsZXQgcGlja2VyT3B0aW9uc1RvU2VuZDtcbiAgICBpZiAocGlja2VyT3B0aW9ucyAmJiBPYmplY3Qua2V5cyhwaWNrZXJPcHRpb25zKS5sZW5ndGgpIHtcbiAgICAgIHBpY2tlck9wdGlvbnNUb1NlbmQgPSBjbGVhblVwQ2FsbGJhY2tzKGNsb25lRGVlcCh7IC4uLnBpY2tlck9wdGlvbnMgfSkpO1xuICAgIH1cblxuICAgIHBhcmFtc1RvU2VuZCA9IHtcbiAgICAgIC4uLnBhcmFtc1RvU2VuZCxcbiAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgc2V0dGluZ3MsXG4gICAgICBwaWNrZXJfY29uZmlnOiBwaWNrZXJPcHRpb25zVG9TZW5kLFxuICAgICAgZXZlbnRzLFxuICAgIH07XG5cbiAgICB0aGlzLnNlc3Npb24ucHJlZmV0Y2ggPSBudWxsO1xuXG4gICAgcmV0dXJuIEZzUmVxdWVzdC5wb3N0KGAke3RoaXMuc2Vzc2lvbi51cmxzLnVwbG9hZEFwaVVybH0vcHJlZmV0Y2hgLCBwYXJhbXNUb1NlbmQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBGaWxlc3RhY2tFcnJvcignVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggcHJlZmV0Y2ggcmVxdWVzdCcpO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YSA9IHJlcy5kYXRhO1xuXG4gICAgICAvLyBpZiBiYWNrZW5kIG5vdCByZXR1cm5pbmcgdXBkYXRlZF9jb25maWcgY2F5IHdlIHRha2Ugb2xkIGNvbmZpZyBhbmQgcmV0dXJuXG4gICAgICBpZiAoZGF0YS51cGRhdGVkX2NvbmZpZykge1xuICAgICAgICAvLyByZWFzc2lnbiBjYWxsYmFjayBmcm9tIG9sZCBjb25maWcgdG8gbmV3IG9uZSByZXR1cm5lZCBmcm9tIGJhY2tlbmRcbiAgICAgICAgZGF0YS5waWNrZXJPcHRpb25zID0gdGhpcy5yZWFzc2lnbkNhbGxiYWNrcyhwaWNrZXJPcHRpb25zLCBkYXRhLnVwZGF0ZWRfY29uZmlnIHx8IHt9KTtcbiAgICAgICAgZGVsZXRlIGRhdGEudXBkYXRlZF9jb25maWc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhLnBpY2tlck9wdGlvbnMgPSBwaWNrZXJPcHRpb25zO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNlc3Npb24ucHJlZmV0Y2ggPSBkYXRhO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFzc2lnbiBjYWxsYmFja3MgZnJvbSBvbGQgcGlja2VyIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIG9iak9sZFxuICAgKiBAcGFyYW0gb2JqVGFyZ2V0XG4gICAqL1xuICBwcml2YXRlIHJlYXNzaWduQ2FsbGJhY2tzKG9iak9sZCwgb2JqVGFyZ2V0KSB7XG4gICAgaWYgKCFvYmpPbGQgfHwgT2JqZWN0LmtleXMob2JqT2xkKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvYmpPbGQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrIGluIG9iak9sZCkge1xuICAgICAgaWYgKHR5cGVvZiBvYmpPbGRba10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JqVGFyZ2V0W2tdID0gb2JqT2xkW2tdO1xuICAgICAgfVxuXG4gICAgICBpZiAob2JqT2xkW2tdID09PSBPYmplY3Qob2JqT2xkW2tdKSkge1xuICAgICAgICBvYmpUYXJnZXRba10gPSB0aGlzLnJlYXNzaWduQ2FsbGJhY2tzKG9iak9sZFtrXSwgb2JqVGFyZ2V0W2tdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqVGFyZ2V0O1xuICB9XG59XG4iXX0=