import retry from 'p-retry'; import {defaultProfile} from './lib/default-profile.js'; const retryDefaults = { retries: 3, factor: 3, minTimeout: 5 * 1000, }; const withRetrying = (profile, retryOpts = {}) => { retryOpts = Object.assign({}, retryDefaults, retryOpts); // https://github.com/public-transport/hafas-client/issues/76#issuecomment-574408717 const {request} = {...defaultProfile, ...profile}; const retryingRequest = (...args) => { const attempt = () => { return request(...args) .catch((err) => { if (err.isHafasError) { throw err; } // continue if (err.code === 'ENOTFOUND') { // abort const abortErr = new retry.AbortError(err); Object.assign(abortErr, err); throw abortErr; } throw err; // continue }); }; return retry(attempt, retryOpts); }; return { ...profile, request: retryingRequest, }; }; export { withRetrying, };