Refactor JSON parsing and share URL extraction

This commit is contained in:
Kosztyk 2026-01-11 23:54:30 +02:00 committed by GitHub
parent 089bc8ed85
commit 1c8e084788
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -107,23 +107,49 @@ export async function sendFileToErugo(options: {
); );
} }
let json: any = null; const get = (obj: unknown, key: string): unknown => {
try { if (!obj || typeof obj !== "object") return undefined;
json = text ? JSON.parse(text) : null; return (obj as Record<string, unknown>)[key];
} catch { };
json = { raw: text };
const getNested = (obj: unknown, keys: string[]): unknown => {
let cur: unknown = obj;
for (const k of keys) {
cur = get(cur, k);
if (cur === undefined || cur === null) return undefined;
} }
return cur;
};
let jsonObj: Record<string, unknown> = {};
try {
const parsed: unknown = text ? JSON.parse(text) : null;
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
jsonObj = parsed as Record<string, unknown>;
} else {
jsonObj = { value: parsed };
}
} catch {
jsonObj = { raw: text };
}
const shareUrlCandidates: unknown[] = [
getNested(jsonObj, ["share_url"]),
getNested(jsonObj, ["share_link"]),
getNested(jsonObj, ["data", "url"]),
getNested(jsonObj, ["data", "share", "url"]),
getNested(jsonObj, ["data", "share_url"]),
getNested(jsonObj, ["data", "share_link"]),
];
const share_url =
(shareUrlCandidates.find((v) => typeof v === "string") as string | undefined) ??
null;
return { return {
...json, ...jsonObj,
share_url: share_url,
json?.share_url ||
json?.share_link ||
json?.data?.url ||
json?.data?.share?.url ||
json?.data?.share_url ||
json?.data?.share_link ||
null,
}; };
}