diff --git a/web/apps/photos/src/services/export/index.ts b/web/apps/photos/src/services/export/index.ts index 1a4d339aa..99e2ac1a8 100644 --- a/web/apps/photos/src/services/export/index.ts +++ b/web/apps/photos/src/services/export/index.ts @@ -996,10 +996,26 @@ class ExportService { // TODO(MR): Productionalize if (isDevBuild) { console.log({ a: "will send req", updatedFileStream }); + // The duplex parameter needs to be set to 'half' when + // streaming requests. + // + // Currently browsers, and specifically in our case, + // since this code runs only within our desktop + // (Electron) app, Chromium, don't support 'full' duplex + // mode (i.e. streaming both the request and the + // response). + // + // https://developer.chrome.com/docs/capabilities/web-apis/fetch-streaming-requests + // + // In another twist, the TypeScript libdom.d.ts does not + // include the "duplex" parameter, so we need to cast to + // get TypeScript to let this code through. e.g. see + // https://github.com/node-fetch/node-fetch/issues/1769 const req = new Request("stream://foo", { method: "POST", body: updatedFileStream, - }); + duplex: "half", + } as unknown as RequestInit); const res = await fetch(req); console.log({ a: "got res", res }); }