diff --git a/common/spaces/fallback_space_primitives.ts b/common/spaces/fallback_space_primitives.ts index 2d26ac5..08df744 100644 --- a/common/spaces/fallback_space_primitives.ts +++ b/common/spaces/fallback_space_primitives.ts @@ -20,15 +20,27 @@ export class FallbackSpacePrimitives implements SpacePrimitives { async readFile(name: string): Promise<{ data: Uint8Array; meta: FileMeta }> { try { return await this.primary.readFile(name); - } catch { - return this.fallback.readFile(name); + } catch (e) { + try { + return this.fallback.readFile(name); + } catch (fallbackError) { + console.error("Error during reaFile fallback", fallbackError); + // Fallback failed, so let's throw the original error + throw e; + } } } async getFileMeta(name: string): Promise { try { return await this.primary.getFileMeta(name); - } catch { - return this.fallback.getFileMeta(name); + } catch (e) { + try { + return this.fallback.getFileMeta(name); + } catch (fallbackError) { + console.error("Error during getFileMeta fallback", fallbackError); + // Fallback failed, so let's throw the original error + throw e; + } } } writeFile( diff --git a/common/spaces/http_space_primitives.ts b/common/spaces/http_space_primitives.ts index 753680a..ac37af1 100644 --- a/common/spaces/http_space_primitives.ts +++ b/common/spaces/http_space_primitives.ts @@ -21,9 +21,7 @@ export class HttpSpacePrimitives implements SpacePrimitives { options.headers = { ...options.headers, ...{ "X-Sync-Mode": "true" } }; } - const result = await fetch(url, { - ...options, - }); + const result = await fetch(url, options); if (result.redirected) { // Got a redirect, we'll assume this is due to invalid credentials and redirecting to an auth page console.log( @@ -118,8 +116,10 @@ export class HttpSpacePrimitives implements SpacePrimitives { async getFileMeta(name: string): Promise { const res = await this.authenticatedFetch( `${this.url}/${encodeURI(name)}`, + // This used to use HEAD, but it seems that Safari on iOS is blocking cookies/credentials to be sent along with HEAD requests + // so we'll use GET instead and not use the body. A bit wasteful, but it works. { - method: "HEAD", + method: "GET", }, ); if (res.status === 404) {