filestack-js
Version:
Official JavaScript library for Filestack
78 lines (76 loc) • 9.45 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Dispatch = void 0;
var tslib_1 = require("tslib");
var shouldRetry_1 = require("./helpers/shouldRetry");
var debug_1 = tslib_1.__importDefault(require("debug"));
var debug = (0, debug_1.default)('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 (!(0, shouldRetry_1.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 = tslib_1.__assign(tslib_1.__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;
}());
exports.Dispatch = Dispatch;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9kaXNwYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBbUJBLHFEQUFvRDtBQUNwRCx3REFBMEI7QUFFMUIsSUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFLLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUzQzs7Ozs7R0FLRztBQUNIO0lBR0U7Ozs7O09BS0c7SUFDSCxrQkFBWSxPQUF5QjtRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLDBCQUFPLEdBQWQsVUFBZSxNQUF3QjtRQUF2QyxpQkFPQztRQU5DLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDdEMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQUMsTUFBc0I7WUFDL0QsS0FBSyxDQUFDLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsT0FBTyxLQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyx3QkFBSyxHQUFiLFVBQWMsR0FBbUI7UUFBakMsaUJBaUNDO1FBaENDLElBQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFMUIsSUFBSSxDQUFDLElBQUEseUJBQVcsRUFBQyxHQUFHLENBQUMsRUFBRTtZQUNyQixLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUN6RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNqQixLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUNqRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUI7UUFFRCxJQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0YsSUFBSSxXQUFXLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxLQUFLLElBQUksUUFBUSxFQUFFO1lBQ3RELEtBQUssQ0FBQyw0Q0FBNEMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUI7UUFFRCxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxTQUFBLFdBQVcsQ0FBQyxXQUFXLEVBQUksUUFBUSxDQUFBLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFL0csTUFBTSxDQUFDLE9BQU8seUNBQ1QsTUFBTSxDQUFDLE9BQU8sS0FDakIsVUFBVSxFQUFFLFFBQVEsR0FBRyxDQUFDLEdBQ3pCLENBQUM7UUFFRixLQUFLLENBQUMsc0NBQStCLE1BQU0sQ0FBQyxHQUFHLHFCQUFXLFFBQVEsaUJBQU8sV0FBVyxDQUFDLEtBQUssdUJBQWEsVUFBVSxDQUFFLENBQUMsQ0FBQztRQUVySCxPQUFPLElBQUksT0FBTyxDQUFhLFVBQUEsT0FBTztZQUNwQyxVQUFVLENBQUMsY0FBTSxPQUFBLE9BQU8sQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQTdCLENBQTZCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0gsZUFBQztBQUFELENBeEVBLEFBd0VDLElBQUE7QUF4RVksNEJBQVEiLCJmaWxlIjoibGliL3JlcXVlc3QvZGlzcGF0Y2guanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFja1xuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBGc1JlcXVlc3RPcHRpb25zLCBGc1Jlc3BvbnNlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBBZGFwdGVySW50ZXJmYWNlIH0gZnJvbSAnLi9hZGFwdGVycy9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRnNSZXF1ZXN0RXJyb3IgfSBmcm9tICcuL2Vycm9yJztcbmltcG9ydCB7IHNob3VsZFJldHJ5IH0gZnJvbSAnLi9oZWxwZXJzL3Nob3VsZFJldHJ5JztcbmltcG9ydCBEZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5cbmNvbnN0IGRlYnVnID0gRGVidWcoJ2ZzOnJlcXVlc3Q6ZGlzcGF0Y2gnKTtcblxuLyoqXG4gKiBSZXF1ZXN0IGRpc3BhdGNoZXJcbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgRGlzcGF0Y2hcbiAqL1xuZXhwb3J0IGNsYXNzIERpc3BhdGNoIHtcbiAgYWRhcHRlcjogQWRhcHRlckludGVyZmFjZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBEaXNwYXRjaC5cbiAgICpcbiAgICogQHBhcmFtIHtBZGFwdGVySW50ZXJmYWNlfSBhZGFwdGVyIGh0dHAgfCBYSFIgYWRhcGF0ZXJcbiAgICogQG1lbWJlcm9mIERpc3BhdGNoXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyOiBBZGFwdGVySW50ZXJmYWNlKSB7XG4gICAgdGhpcy5hZGFwdGVyID0gYWRhcHRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCByZXF1ZXN0IGFkZGluZyByZXRyeSBwb2xpY3lcbiAgICogQHRvZG8gYWRkIGRhdGEgcHJlcHJvY2Vzb3JcbiAgICpcbiAgICogQHBhcmFtIHtGc1JlcXVlc3RPcHRpb25zfSBjb25maWdcbiAgICogQHJldHVybnMge1Byb21pc2U8RnNSZXNwb25zZT59XG4gICAqIEBtZW1iZXJvZiBEaXNwYXRjaFxuICAgKi9cbiAgcHVibGljIHJlcXVlc3QoY29uZmlnOiBGc1JlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxGc1Jlc3BvbnNlPiB7XG4gICAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcbiAgICBkZWJ1ZygnRGlzcGF0Y2hpbmcgcmVxdWVzdCAlTycsIGNvbmZpZyk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXF1ZXN0KGNvbmZpZykuY2F0Y2goKHJlYXNvbjogRnNSZXF1ZXN0RXJyb3IpID0+IHtcbiAgICAgIGRlYnVnKCdSZXF1ZXN0IGVycm9yIFwiJXNcIjogJU8nLCByZWFzb24sIHJlYXNvbi5yZXNwb25zZSk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeShyZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgcmV0cmllclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0ZzUmVxdWVzdEVycm9yfSBlcnJcbiAgICogQHJldHVybnNcbiAgICogQG1lbWJlcm9mIERpc3BhdGNoXG4gICAqL1xuICBwcml2YXRlIHJldHJ5KGVycjogRnNSZXF1ZXN0RXJyb3IpIHtcbiAgICBjb25zdCBjb25maWcgPSBlcnIuY29uZmlnO1xuXG4gICAgaWYgKCFzaG91bGRSZXRyeShlcnIpKSB7XG4gICAgICBkZWJ1ZygnW1JldHJ5XSBSZXF1ZXN0IGVycm9yIGlzIG5vdCByZXRyaWFibGUuIEV4aXRpbmcnKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLnJldHJ5KSB7XG4gICAgICBkZWJ1ZygnW1JldHJ5XSBSZXRyeSBjb25maWcgbm90IGZvdW5kLiBFeGl0aW5nJyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeUNvbmZpZyA9IGNvbmZpZy5yZXRyeTtcbiAgICBsZXQgYXR0ZW1wdHMgPSBjb25maWcucnVudGltZSAmJiBjb25maWcucnVudGltZS5yZXRyeUNvdW50ID8gY29uZmlnLnJ1bnRpbWUucmV0cnlDb3VudCA6IDA7XG5cbiAgICBpZiAocmV0cnlDb25maWcucmV0cnkgJiYgcmV0cnlDb25maWcucmV0cnkgPD0gYXR0ZW1wdHMpIHtcbiAgICAgIGRlYnVnKCdbUmV0cnldIFJldHJ5IGF0dGVtcHRzIHJlYWNoZWQgJWQuIEV4aXRpbmcnLCBhdHRlbXB0cyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeURlbGF5ID0gTWF0aC5tYXgoTWF0aC5taW4ocmV0cnlDb25maWcucmV0cnlNYXhUaW1lLCByZXRyeUNvbmZpZy5yZXRyeUZhY3RvciAqKiBhdHRlbXB0cyAqIDEwMDApLCAxKTtcblxuICAgIGNvbmZpZy5ydW50aW1lID0ge1xuICAgICAgLi4uY29uZmlnLnJ1bnRpbWUsXG4gICAgICByZXRyeUNvdW50OiBhdHRlbXB0cyArIDEsXG4gICAgfTtcblxuICAgIGRlYnVnKGBbUmV0cnldIFJldHJ5aW5nIHJlcXVlc3QgdG8gJHtjb25maWcudXJsfSwgY291bnQgJHthdHRlbXB0c30gb2YgJHtyZXRyeUNvbmZpZy5yZXRyeX0gLSBEZWxheTogJHtyZXRyeURlbGF5fWApO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEZzUmVzcG9uc2U+KHJlc29sdmUgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHRoaXMucmVxdWVzdChjb25maWcpKSwgcmV0cnlEZWxheSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
;