mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-10-31 13:34:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			31 lines
		
	
	
	
		
			711 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
	
		
			711 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /*
 | |
|  * SPDX-FileCopyrightText: outvi and other Sharkey contributors
 | |
|  * SPDX-License-Identifier: AGPL-3.0-only
 | |
| */
 | |
| 
 | |
| async function sleep(ms: number): Promise<void> {
 | |
| 	return new Promise((resolve) => {
 | |
| 		window.setTimeout(() => {
 | |
| 			resolve();
 | |
| 		}, ms);
 | |
| 	});
 | |
| }
 | |
| 
 | |
| export async function retryOnThrottled<T>(f: () => Promise<T>, retryCount = 5): Promise<T> {
 | |
|   let lastError;
 | |
|   for (let i = 0; i < Math.min(retryCount, 1); i++) {
 | |
| 	try {
 | |
| 	  return await f();
 | |
| 	} catch (err: any) {
 | |
| 	  // RATE_LIMIT_EXCEEDED
 | |
| 	  if (typeof err === 'object' && err?.id === 'd5826d14-3982-4d2e-8011-b9e9f02499ef') {
 | |
| 		lastError = err;
 | |
| 		await sleep(err?.info?.fullResetMs ?? 1000);
 | |
| 	  } else {
 | |
| 		throw err;
 | |
| 	  }
 | |
| 	}
 | |
|   }
 | |
| 
 | |
|   throw lastError;
 | |
| }
 |