fedimbed: try catch nodeinfo

This commit is contained in:
Cynthia Foxwell 2025-03-13 11:18:43 -06:00
parent 5fb999ec5b
commit d39bf5f2a4
Signed by: Cynosphere
SSH key fingerprint: SHA256:H3SM8ufP/uxqLwKSH7xY89TDnbR9uOHzjLoBr0tlajk

View file

@ -30,12 +30,12 @@ const PATH_REGEX = {
lemmy: /^\/post\/\d+\/?/,
honk: /^\/u\/(.+?)\/h\/(.+?)\/?/,
pixelfed: /^\/p\/(.+?)\/(.+?)\/?/,
cohost: /^\/[A-Za-z0-9]+\/post\/\d+-[A-Za-z0-9-]+\/?/,
//cohost: /^\/[A-Za-z0-9]+\/post\/\d+-[A-Za-z0-9-]+\/?/,
bluesky: BSKY_POST_REGEX,
};
const PLATFORM_COLORS = {
mastodon: 0x2791da,
mastodon: 0x6363ff,
pleroma: 0xfba457,
akkoma: 0x593196,
misskey: 0x99c203,
@ -46,7 +46,7 @@ const PLATFORM_COLORS = {
birdsitelive: 0x1da1f2,
iceshrimp: 0x8e82f9, // YCbCr interpolated as the accent color is a gradient
pixelfed: 0x10c5f8,
cohost: 0x83254f,
//cohost: 0x83254f,
bluesky: 0x0085ff,
};
@ -67,6 +67,7 @@ const BSKY_DOMAINS = [
/*const TW_DOMAINS = [
"tw.c7.pm",
"tw.counter-strike.gay",
"xcancel.com",
"twitter.com",
"x.com",
"fxtwitter.com",
@ -84,36 +85,41 @@ async function resolvePlatform(url) {
const urlObj = new URL(url);
if (domainCache.has(urlObj.hostname)) return domainCache.get(urlObj.hostname);
const res = await fetch(urlObj.origin + "/.well-known/nodeinfo", {
headers: {"User-Agent": FRIENDLY_USERAGENT},
}).then((res) => res.text());
try {
const res = await fetch(urlObj.origin + "/.well-known/nodeinfo", {
headers: {"User-Agent": FRIENDLY_USERAGENT},
}).then((res) => res.text());
if (!res.startsWith("{")) {
logger.error("fedimbed", `No nodeinfo for "${urlObj.hostname}"???`);
domainCache.set(urlObj.hostname, null);
return null;
if (!res.startsWith("{")) {
logger.error("fedimbed", `No nodeinfo for "${urlObj.hostname}"???`);
domainCache.set(urlObj.hostname, null);
return null;
}
const probe = JSON.parse(res);
if (!probe?.links) {
logger.error("fedimbed", `No nodeinfo for "${urlObj.hostname}"???`);
domainCache.set(urlObj.hostname, null);
return null;
}
const nodeinfo = await fetch(probe.links[probe.links.length - 1].href, {
headers: {"User-Agent": FRIENDLY_USERAGENT},
}).then((res) => res.json());
if (!nodeinfo?.software?.name) {
logger.error("fedimbed", `Got nodeinfo for "${urlObj.hostname}", but missing software name.`);
domainCache.set(urlObj.hostname, null);
return null;
}
domainCache.set(urlObj.hostname, nodeinfo.software.name);
return nodeinfo.software.name;
} catch (err) {
logger.error("fedimbed", `Failed to get nodeinfo for "${url}": ${err}`);
return "<nodeinfo failed>";
}
const probe = JSON.parse(res);
if (!probe?.links) {
logger.error("fedimbed", `No nodeinfo for "${urlObj.hostname}"???`);
domainCache.set(urlObj.hostname, null);
return null;
}
const nodeinfo = await fetch(probe.links[probe.links.length - 1].href, {
headers: {"User-Agent": FRIENDLY_USERAGENT},
}).then((res) => res.json());
if (!nodeinfo?.software?.name) {
logger.error("fedimbed", `Got nodeinfo for "${urlObj.hostname}", but missing software name.`);
domainCache.set(urlObj.hostname, null);
return null;
}
domainCache.set(urlObj.hostname, nodeinfo.software.name);
return nodeinfo.software.name;
}
const keyId = "https://hf.c7.pm/actor#main-key";