| 
									
										
										
										
											2024-02-06 22:58:49 +01:00
										 |  |  | import retry from 'p-retry'; | 
					
						
							|  |  |  | import {defaultProfile} from './lib/default-profile.js'; | 
					
						
							| 
									
										
										
										
											2019-02-08 13:13:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-08 14:16:43 +01:00
										 |  |  | const retryDefaults = { | 
					
						
							| 
									
										
										
										
											2019-02-08 13:13:53 +01:00
										 |  |  | 	retries: 3, | 
					
						
							|  |  |  | 	factor: 3, | 
					
						
							| 
									
										
										
										
											2024-02-06 22:58:49 +01:00
										 |  |  | 	minTimeout: 5 * 1000, | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2019-02-08 13:13:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-31 18:48:11 +01:00
										 |  |  | const withRetrying = (profile, retryOpts = {}) => { | 
					
						
							| 
									
										
										
										
											2024-02-06 22:58:49 +01:00
										 |  |  | 	retryOpts = Object.assign({}, retryDefaults, retryOpts); | 
					
						
							| 
									
										
										
										
											2020-01-14 23:56:03 +01:00
										 |  |  | 	// https://github.com/public-transport/hafas-client/issues/76#issuecomment-574408717
 | 
					
						
							| 
									
										
										
										
											2024-02-06 22:58:49 +01:00
										 |  |  | 	const {request} = {...defaultProfile, ...profile}; | 
					
						
							| 
									
										
										
										
											2019-10-31 18:48:11 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	const retryingRequest = (...args) => { | 
					
						
							|  |  |  | 		const attempt = () => { | 
					
						
							|  |  |  | 			return request(...args) | 
					
						
							| 
									
										
										
										
											2024-02-06 22:58:49 +01:00
										 |  |  | 				.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); | 
					
						
							|  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2019-02-08 13:13:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-31 18:48:11 +01:00
										 |  |  | 	return { | 
					
						
							|  |  |  | 		...profile, | 
					
						
							| 
									
										
										
										
											2024-02-06 22:58:49 +01:00
										 |  |  | 		request: retryingRequest, | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2019-02-08 13:13:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-07 16:17:37 +02:00
										 |  |  | export { | 
					
						
							|  |  |  | 	withRetrying, | 
					
						
							| 
									
										
										
										
											2024-02-06 22:58:49 +01:00
										 |  |  | }; |