From c39ae2b96543850adb7d181dfe17110fa541a432 Mon Sep 17 00:00:00 2001 From: Marek Maslowski Date: Sat, 4 Apr 2026 22:43:13 +0200 Subject: [PATCH] adding fetch in try to prevent crashes --- .../src/services/memories/synologyService.ts | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/server/src/services/memories/synologyService.ts b/server/src/services/memories/synologyService.ts index c754ea9..b02944d 100644 --- a/server/src/services/memories/synologyService.ts +++ b/server/src/services/memories/synologyService.ts @@ -140,21 +140,26 @@ async function _fetchSynologyJson(url: string, body: URLSearchParams): Promis if (!SsrfResult.allowed) { return fail(SsrfResult.error, 400); } - const resp = await fetch(endpoint, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', - }, - body, - signal: AbortSignal.timeout(30000), - }); - - if (!resp.ok) { - return fail('Synology API request failed with status ' + resp.status, resp.status); + try { + const resp = await fetch(endpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', + }, + body, + signal: AbortSignal.timeout(30000), + }); + if (!resp.ok) { + return fail('Synology API request failed with status ' + resp.status, resp.status); + } + const response = await resp.json() as SynologyApiResponse; + return response.success ? success(response.data) : fail('Synology failed with code ' + response.error.code, response.error.code); + } + catch { + return fail('Failed to connect to Synology API', 500); } - const response = await resp.json() as SynologyApiResponse; - return response.success ? success(response.data) : fail('Synology failed with code ' + response.error.code, response.error.code); + } async function _loginToSynology(url: string, username: string, password: string): Promise> { @@ -382,12 +387,12 @@ export async function syncSynologyAlbumLink(userId: number, tripId: string, link asset_ids: allItems.map(item => String(item.additional?.thumbnail?.cache_key || '')).filter(id => id), }; - + const result = await addTripPhotos(tripId, userId, true, [selection], sid, linkId); if (!result.success) return result as ServiceResult; - + updateSyncTimeForAlbumLink(linkId); - + return success({ added: result.data.added, total: allItems.length }); }