From b2e958305537a5c52dfc68d969dd9e7ac3e95ff6 Mon Sep 17 00:00:00 2001 From: "s.hajizadeh" Date: Tue, 28 Jul 2026 10:23:45 +0330 Subject: [PATCH] base url dev + some error handling --- src/main.ts | 2 +- src/providers/base/base-provider.abstract.ts | 25 ++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main.ts b/src/main.ts index c626627..bba2f4d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -70,7 +70,7 @@ async function bootstrap(): Promise { ) .setVersion('1.0') .addServer("http://localhost:8085") - .addServer("http://192.168.20.22:8085"); + .addServer(process.env.BASE_URL_DEV + "") if (clientUrl) { documentBuilder.addServer(clientUrl); diff --git a/src/providers/base/base-provider.abstract.ts b/src/providers/base/base-provider.abstract.ts index dfa60e1..906edc5 100644 --- a/src/providers/base/base-provider.abstract.ts +++ b/src/providers/base/base-provider.abstract.ts @@ -119,10 +119,31 @@ export abstract class BaseProvider } protected isRetryable(error: unknown): boolean { - if (error && typeof error === 'object' && 'code' in error) { + if (!error || typeof error !== 'object') return false; + + // Network-level transient errors + if ('code' in error) { const code = (error as { code?: string }).code; - return code === 'ETIMEDOUT' || code === 'ECONNABORTED' || code === 'ECONNRESET'; + if (code === 'ETIMEDOUT' || code === 'ECONNABORTED' || code === 'ECONNRESET') { + return true; + } } + + // HTTP errors that indicate provider unavailability + if ('response' in error) { + const status = (error as { response?: { status?: number } }).response?.status; + if (typeof status === 'number') { + if ( + status === 408 || // Request Timeout — provider didn't answer in time + status === 429 || // Too Many Requests — provider rate-limited us + status === 499 || // Client Closed Request — provider hung up + (status >= 500 && status < 600) // 5xx server errors + ) { + return true; + } + } + } + return false; }