From 6dd21e109099d6bbda7859e0f60727d675228f22 Mon Sep 17 00:00:00 2001 From: zetaloop Date: Sat, 28 Feb 2026 16:10:50 +0800 Subject: [PATCH] feat(files): fetch file blob by id --- lib/api/files.ts | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/lib/api/files.ts b/lib/api/files.ts index bd397c2..1044489 100644 --- a/lib/api/files.ts +++ b/lib/api/files.ts @@ -1,4 +1,33 @@ -export function getFileById(fileId: string): never { - void fileId - throw new Error("Not implemented") +export async function getFileById(fileId: string): Promise { + const res = await fetch(`/api/v1/files/${encodeURIComponent(fileId)}`) + + if (res.ok) return await res.blob() + + const text = await res.text() + let json: unknown = null + if (text) { + try { + json = JSON.parse(text) as unknown + } catch { + json = null + } + } + + const maybeObj = (typeof json === "object" && json !== null ? json : null) as { + code?: unknown + message?: unknown + msg?: unknown + } | null + + const code = (typeof maybeObj?.code === "number" ? maybeObj.code : res.status) as number + const msg = + typeof maybeObj?.message === "string" + ? maybeObj.message + : typeof maybeObj?.msg === "string" + ? maybeObj.msg + : text || res.statusText || "Request failed" + + if (res.status === 401 || code === 401) throw new Error("UNAUTHORIZED") + + throw { code, msg } }