UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

75 lines (73 loc) 9.29 kB
import { __assign } from "tslib"; import { shouldRetry } from './helpers/shouldRetry'; import Debug from 'debug'; var debug = Debug('fs:request:dispatch'); /** * Request dispatcher * * @export * @class Dispatch */ var Dispatch = /** @class */ (function () { /** * Creates an instance of Dispatch. * * @param {AdapterInterface} adapter http | XHR adapater * @memberof Dispatch */ function Dispatch(adapter) { this.adapter = adapter; } /** * Dispatch request adding retry policy * @todo add data preprocesor * * @param {FsRequestOptions} config * @returns {Promise<FsResponse>} * @memberof Dispatch */ Dispatch.prototype.request = function (config) { var _this = this; config.headers = config.headers || {}; debug('Dispatching request %O', config); return this.adapter.request(config).catch(function (reason) { debug('Request error "%s": %O', reason, reason.response); return _this.retry(reason); }); }; /** * Request retrier * * @private * @param {FsRequestError} err * @returns * @memberof Dispatch */ Dispatch.prototype.retry = function (err) { var _this = this; var config = err.config; if (!shouldRetry(err)) { debug('[Retry] Request error is not retriable. Exiting'); return Promise.reject(err); } if (!config.retry) { debug('[Retry] Retry config not found. Exiting'); return Promise.reject(err); } var retryConfig = config.retry; var attempts = config.runtime && config.runtime.retryCount ? config.runtime.retryCount : 0; if (retryConfig.retry && retryConfig.retry <= attempts) { debug('[Retry] Retry attempts reached %d. Exiting', attempts); return Promise.reject(err); } var retryDelay = Math.max(Math.min(retryConfig.retryMaxTime, Math.pow(retryConfig.retryFactor, attempts) * 1000), 1); config.runtime = __assign(__assign({}, config.runtime), { retryCount: attempts + 1 }); debug("[Retry] Retrying request to ".concat(config.url, ", count ").concat(attempts, " of ").concat(retryConfig.retry, " - Delay: ").concat(retryDelay)); return new Promise(function (resolve) { setTimeout(function () { return resolve(_this.request(config)); }, retryDelay); }); }; return Dispatch; }()); export { Dispatch }; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9kaXNwYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBbUJBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsSUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFM0M7Ozs7O0dBS0c7QUFDSDtJQUdFOzs7OztPQUtHO0lBQ0gsa0JBQVksT0FBeUI7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSwwQkFBTyxHQUFkLFVBQWUsTUFBd0I7UUFBdkMsaUJBT0M7UUFOQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3RDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFDLE1BQXNCO1lBQy9ELEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sS0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssd0JBQUssR0FBYixVQUFjLEdBQW1CO1FBQWpDLGlCQWlDQztRQWhDQyxJQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBRTFCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckIsS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDekQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDakIsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDakQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNGLElBQUksV0FBVyxDQUFDLEtBQUssSUFBSSxXQUFXLENBQUMsS0FBSyxJQUFJLFFBQVEsRUFBRTtZQUN0RCxLQUFLLENBQUMsNENBQTRDLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsU0FBQSxXQUFXLENBQUMsV0FBVyxFQUFJLFFBQVEsQ0FBQSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9HLE1BQU0sQ0FBQyxPQUFPLHlCQUNULE1BQU0sQ0FBQyxPQUFPLEtBQ2pCLFVBQVUsRUFBRSxRQUFRLEdBQUcsQ0FBQyxHQUN6QixDQUFDO1FBRUYsS0FBSyxDQUFDLHNDQUErQixNQUFNLENBQUMsR0FBRyxxQkFBVyxRQUFRLGlCQUFPLFdBQVcsQ0FBQyxLQUFLLHVCQUFhLFVBQVUsQ0FBRSxDQUFDLENBQUM7UUFFckgsT0FBTyxJQUFJLE9BQU8sQ0FBYSxVQUFBLE9BQU87WUFDcEMsVUFBVSxDQUFDLGNBQU0sT0FBQSxPQUFPLENBQUMsS0FBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUE3QixDQUE2QixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNILGVBQUM7QUFBRCxDQXhFQSxBQXdFQyxJQUFBIiwiZmlsZSI6ImxpYi9yZXF1ZXN0L2Rpc3BhdGNoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2tcbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgRnNSZXF1ZXN0T3B0aW9ucywgRnNSZXNwb25zZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQWRhcHRlckludGVyZmFjZSB9IGZyb20gJy4vYWRhcHRlcnMvaW50ZXJmYWNlJztcbmltcG9ydCB7IEZzUmVxdWVzdEVycm9yIH0gZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgeyBzaG91bGRSZXRyeSB9IGZyb20gJy4vaGVscGVycy9zaG91bGRSZXRyeSc7XG5pbXBvcnQgRGVidWcgZnJvbSAnZGVidWcnO1xuXG5jb25zdCBkZWJ1ZyA9IERlYnVnKCdmczpyZXF1ZXN0OmRpc3BhdGNoJyk7XG5cbi8qKlxuICogUmVxdWVzdCBkaXNwYXRjaGVyXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIERpc3BhdGNoXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXNwYXRjaCB7XG4gIGFkYXB0ZXI6IEFkYXB0ZXJJbnRlcmZhY2U7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRGlzcGF0Y2guXG4gICAqXG4gICAqIEBwYXJhbSB7QWRhcHRlckludGVyZmFjZX0gYWRhcHRlciBodHRwIHwgWEhSIGFkYXBhdGVyXG4gICAqIEBtZW1iZXJvZiBEaXNwYXRjaFxuICAgKi9cbiAgY29uc3RydWN0b3IoYWRhcHRlcjogQWRhcHRlckludGVyZmFjZSkge1xuICAgIHRoaXMuYWRhcHRlciA9IGFkYXB0ZXI7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggcmVxdWVzdCBhZGRpbmcgcmV0cnkgcG9saWN5XG4gICAqIEB0b2RvIGFkZCBkYXRhIHByZXByb2Nlc29yXG4gICAqXG4gICAqIEBwYXJhbSB7RnNSZXF1ZXN0T3B0aW9uc30gY29uZmlnXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEZzUmVzcG9uc2U+fVxuICAgKiBAbWVtYmVyb2YgRGlzcGF0Y2hcbiAgICovXG4gIHB1YmxpYyByZXF1ZXN0KGNvbmZpZzogRnNSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8RnNSZXNwb25zZT4ge1xuICAgIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG4gICAgZGVidWcoJ0Rpc3BhdGNoaW5nIHJlcXVlc3QgJU8nLCBjb25maWcpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmVxdWVzdChjb25maWcpLmNhdGNoKChyZWFzb246IEZzUmVxdWVzdEVycm9yKSA9PiB7XG4gICAgICBkZWJ1ZygnUmVxdWVzdCBlcnJvciBcIiVzXCI6ICVPJywgcmVhc29uLCByZWFzb24ucmVzcG9uc2UpO1xuICAgICAgcmV0dXJuIHRoaXMucmV0cnkocmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHJldHJpZXJcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtGc1JlcXVlc3RFcnJvcn0gZXJyXG4gICAqIEByZXR1cm5zXG4gICAqIEBtZW1iZXJvZiBEaXNwYXRjaFxuICAgKi9cbiAgcHJpdmF0ZSByZXRyeShlcnI6IEZzUmVxdWVzdEVycm9yKSB7XG4gICAgY29uc3QgY29uZmlnID0gZXJyLmNvbmZpZztcblxuICAgIGlmICghc2hvdWxkUmV0cnkoZXJyKSkge1xuICAgICAgZGVidWcoJ1tSZXRyeV0gUmVxdWVzdCBlcnJvciBpcyBub3QgcmV0cmlhYmxlLiBFeGl0aW5nJyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy5yZXRyeSkge1xuICAgICAgZGVidWcoJ1tSZXRyeV0gUmV0cnkgY29uZmlnIG5vdCBmb3VuZC4gRXhpdGluZycpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0cnlDb25maWcgPSBjb25maWcucmV0cnk7XG4gICAgbGV0IGF0dGVtcHRzID0gY29uZmlnLnJ1bnRpbWUgJiYgY29uZmlnLnJ1bnRpbWUucmV0cnlDb3VudCA/IGNvbmZpZy5ydW50aW1lLnJldHJ5Q291bnQgOiAwO1xuXG4gICAgaWYgKHJldHJ5Q29uZmlnLnJldHJ5ICYmIHJldHJ5Q29uZmlnLnJldHJ5IDw9IGF0dGVtcHRzKSB7XG4gICAgICBkZWJ1ZygnW1JldHJ5XSBSZXRyeSBhdHRlbXB0cyByZWFjaGVkICVkLiBFeGl0aW5nJywgYXR0ZW1wdHMpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0cnlEZWxheSA9IE1hdGgubWF4KE1hdGgubWluKHJldHJ5Q29uZmlnLnJldHJ5TWF4VGltZSwgcmV0cnlDb25maWcucmV0cnlGYWN0b3IgKiogYXR0ZW1wdHMgKiAxMDAwKSwgMSk7XG5cbiAgICBjb25maWcucnVudGltZSA9IHtcbiAgICAgIC4uLmNvbmZpZy5ydW50aW1lLFxuICAgICAgcmV0cnlDb3VudDogYXR0ZW1wdHMgKyAxLFxuICAgIH07XG5cbiAgICBkZWJ1ZyhgW1JldHJ5XSBSZXRyeWluZyByZXF1ZXN0IHRvICR7Y29uZmlnLnVybH0sIGNvdW50ICR7YXR0ZW1wdHN9IG9mICR7cmV0cnlDb25maWcucmV0cnl9IC0gRGVsYXk6ICR7cmV0cnlEZWxheX1gKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxGc1Jlc3BvbnNlPihyZXNvbHZlID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSh0aGlzLnJlcXVlc3QoY29uZmlnKSksIHJldHJ5RGVsYXkpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=