@@ -20,6 +20,7 @@ import { isRoleImpersonationEnabled } from 'state/role-impersonation-state'
2020import { ExecuteSqlError , executeSql } from '../sql/execute-sql-query'
2121import { tableRowKeys } from './keys'
2222import { formatFilterValue } from './utils'
23+ import { ResponseError } from 'types'
2324
2425export interface GetTableRowsArgs {
2526 table ?: SupaTable
@@ -42,6 +43,27 @@ const getDefaultOrderByColumns = (table: SupaTable) => {
4243 }
4344}
4445
46+ function getErrorCode ( error : any ) : number | undefined {
47+ // Our custom ResponseError's use 'code' instead of 'status'
48+ if ( error instanceof ResponseError ) {
49+ return error . code
50+ }
51+ return error . status
52+ }
53+
54+ function getRetryAfter ( error : any ) : number | undefined {
55+ if ( error instanceof ResponseError ) {
56+ return error . retryAfter
57+ }
58+
59+ const headerRetry = error . headers ?. get ( 'retry-after' )
60+ if ( headerRetry ) {
61+ return parseInt ( headerRetry )
62+ }
63+
64+ return undefined
65+ }
66+
4567async function sleep ( ms : number ) {
4668 return new Promise ( ( resolve ) => setTimeout ( resolve , ms ) )
4769}
@@ -54,12 +76,13 @@ export async function executeWithRetry<T>(
5476 for ( let attempt = 0 ; attempt <= maxRetries ; attempt ++ ) {
5577 try {
5678 return await fn ( )
57- } catch ( error : any ) {
58- // Our custom ResponseError's use 'code' instead of 'status'
59- if ( ( error ?. status ?? error ?. code ) === 429 && attempt < maxRetries ) {
79+ } catch ( error : unknown ) {
80+ const errorCode = getErrorCode ( error )
81+ if ( errorCode === 429 && attempt < maxRetries ) {
6082 // Get retry delay from headers or use exponential backoff (1s, then 2s, then 4s)
61- const retryAfter = error . headers ?. get ( 'retry-after' )
62- const delayMs = retryAfter ? parseInt ( retryAfter ) * 1000 : baseDelay * Math . pow ( 2 , attempt )
83+ const retryAfter = getRetryAfter ( error )
84+ const delayMs = retryAfter ? retryAfter * 1000 : baseDelay * Math . pow ( 2 , attempt )
85+
6386 await sleep ( delayMs )
6487 continue
6588 }
0 commit comments