From 8bb4a47ac56ea06867feb62a3f4e472f3fb4cbd1 Mon Sep 17 00:00:00 2001 From: AI Assistant Date: Sun, 8 Mar 2026 03:31:18 +0200 Subject: [PATCH] fix(eterra): increase default timeout 40s -> 120s for large geometry pages - DEFAULT_TIMEOUT_MS: 40_000 -> 120_000 (1000 features with full geometry from Feleacu regularly exceed 40s on the eTerra server) - Add timeoutMs option to syncLayer() for caller override - syncLayer now passes timeoutMs through to EterraClient.create() Fixes 'timeout of 40000ms exceeded' on TERENURI_ACTIVE sync. --- src/modules/parcel-sync/services/eterra-client.ts | 2 +- src/modules/parcel-sync/services/sync-service.ts | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/modules/parcel-sync/services/eterra-client.ts b/src/modules/parcel-sync/services/eterra-client.ts index a0d1f73..11d507d 100644 --- a/src/modules/parcel-sync/services/eterra-client.ts +++ b/src/modules/parcel-sync/services/eterra-client.ts @@ -59,7 +59,7 @@ type ProgressCallback = (downloaded: number, total?: number) => void; const BASE_URL = "https://eterra.ancpi.ro/eterra"; const LOGIN_URL = `${BASE_URL}/api/authentication`; -const DEFAULT_TIMEOUT_MS = 40_000; +const DEFAULT_TIMEOUT_MS = 120_000; const DEFAULT_PAGE_SIZE = 1000; const PAGE_SIZE_FALLBACKS = [500, 200]; const MAX_RETRIES = 2; diff --git a/src/modules/parcel-sync/services/sync-service.ts b/src/modules/parcel-sync/services/sync-service.ts index 3f68df9..29438d3 100644 --- a/src/modules/parcel-sync/services/sync-service.ts +++ b/src/modules/parcel-sync/services/sync-service.ts @@ -54,6 +54,8 @@ export async function syncLayer( /** When true, don't set terminal status (done/error) on progress store. * Used when syncLayer runs as a sub-step of a larger export flow. */ isSubStep?: boolean; + /** Override the default HTTP timeout for the eTerra client (ms). */ + timeoutMs?: number; }, ): Promise { const jobId = options?.jobId; @@ -103,7 +105,9 @@ export async function syncLayer( try { push({ phase: "Conectare eTerra", downloaded: 0 }); - const client = await EterraClient.create(username, password); + const client = await EterraClient.create(username, password, { + timeoutMs: options?.timeoutMs, + }); // Get UAT geometry for spatial-filtered layers let uatGeometry;