From c54ee10f7334feec6ba7b97c8ad3b62a9b5804ae Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Wed, 18 Mar 2026 19:13:00 +0100 Subject: [PATCH] chore: fix dev login issue --- app/routes/api.$.ts | 31 ++++++++++++------- .../__tests__/backups.execution.test.ts | 4 ++- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/routes/api.$.ts b/app/routes/api.$.ts index 80bdbb0e..f36dfa84 100644 --- a/app/routes/api.$.ts +++ b/app/routes/api.$.ts @@ -13,26 +13,35 @@ type NodeRuntimeRequest = Request & { }; }; -export const prepareApiRequest = (request: Request, timeoutMs: number) => { - const nodeRequest = request as NodeRuntimeRequest; - nodeRequest.runtime?.node?.res?.setTimeout(timeoutMs); +type RequestInitWithDuplex = RequestInit & { + duplex?: "half"; +}; + +export const prepareApiRequest = (request: NodeRuntimeRequest, timeoutMs: number) => { + request.runtime?.node?.res?.setTimeout(timeoutMs); if (config.trustProxy && request.headers.has("x-forwarded-for")) { return request.clone(); } - const remoteAddress = nodeRequest.ip; - if (remoteAddress) { - const headers = new Headers(request.headers); - headers.set("x-forwarded-for", remoteAddress); + const remoteAddress = request.ip; + const headers = new Headers(request.headers); - return new Request(request, { headers }); + if (remoteAddress) { + headers.set("x-forwarded-for", remoteAddress); + } else { + headers.delete("x-forwarded-for"); } - const headers = new Headers(request.headers); - headers.delete("x-forwarded-for"); + const init: RequestInitWithDuplex = { + method: request.method, + headers, + body: request.body, + signal: request.signal, + duplex: request.body ? "half" : undefined, + }; - return new Request(request, { headers }); + return new Request(request.url, init); }; const handle = ({ request }: { request: Request }) => diff --git a/app/server/modules/backups/__tests__/backups.execution.test.ts b/app/server/modules/backups/__tests__/backups.execution.test.ts index 8d83436e..bc984c58 100644 --- a/app/server/modules/backups/__tests__/backups.execution.test.ts +++ b/app/server/modules/backups/__tests__/backups.execution.test.ts @@ -18,7 +18,9 @@ import { fromAny } from "@total-typescript/shoehorn"; import { repositoriesService } from "~/server/modules/repositories/repositories.service"; const setup = () => { - const resticBackupMock = mock(() => Promise.resolve({ exitCode: 0, summary: generateBackupOutput(), error: "" })); + const resticBackupMock = mock((_: SafeSpawnParams) => + Promise.resolve({ exitCode: 0, summary: generateBackupOutput(), error: "" }), + ); const resticForgetMock = mock(() => Promise.resolve({ success: true, data: null })); const resticCopyMock = mock(() => Promise.resolve({ success: true, output: "" })); const refreshStatsMock = mock(() =>