{"record":{"id":"e53509158433f479","repo":"diegosouzapw/OmniRoute","slug":"sync-server-res-status-body","errorCode":null,"errorMessage":"Sync server ${res.status}: ${body}","messagePattern":"Sync server (.+?): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/lib/obsidian/api.ts","lineNumber":366,"sourceCode":"  conflictPath: string;\n  detectedAt: number;\n}\n\nexport function createSyncServerClient(syncToken: string, baseUrl?: string) {\n  const resolvedBaseUrl = baseUrl ?? DEFAULT_SYNC_SERVER_URL;\n\n  async function request<T>(path: string, init?: RequestInit): Promise<T> {\n    const res = await fetch(`${resolvedBaseUrl}${path}`, {\n      ...init,\n      headers: {\n        \"Content-Type\": \"application/json\",\n        ...(syncToken ? { Authorization: `Bearer ${syncToken}` } : {}),\n        ...init?.headers,\n      },\n    });\n    if (!res.ok) {\n      const body = await res.text();\n      throw new Error(`Sync server ${res.status}: ${body}`);\n    }\n    return res.json() as Promise<T>;\n  }\n\n  return {\n    async getStatus(): Promise<SyncServerStatus> {\n      return request<SyncServerStatus>(\"/vault/sync/status\");\n    },\n    async triggerSync(): Promise<{ ok: boolean; pulled: number; pushed: number; deleted: number; conflicts: number }> {\n      return request(\"/vault/sync/trigger\", { method: \"POST\" });\n    },\n    async getConflicts(): Promise<{ conflicts: SyncConflict[] }> {\n      return request(\"/vault/sync/conflicts\");\n    },\n    async resolveConflict(path: string, resolution: \"local\" | \"remote\" | \"keep-both\"): Promise<unknown> {\n      return request(\"/vault/sync/resolve\", {\n        method: \"POST\",\n        body: JSON.stringify({ path, resolution }),","sourceCodeStart":348,"sourceCodeEnd":384,"githubUrl":"https://github.com/diegosouzapw/OmniRoute/blob/a179ffed5bb2e0b883b9ae7214ce8717b2a94c4d/src/lib/obsidian/api.ts#L348-L384","documentation":"Error \"Sync server ${res.status}: ${body}\" thrown in diegosouzapw/OmniRoute.","triggerScenarios":"Thrown at src/lib/obsidian/api.ts:366 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a179ffed5bb2e0b883b9ae7214ce8717b2a94c4d","analyzedAt":"2026-08-25T18:35:09.898Z","schemaVersion":2},"datasetVersion":"2026-08-25T21:54:21.419Z"}