diff --git a/src/modules/fedimbed.js b/src/modules/fedimbed.js index fcd4c3c..8ef0778 100644 --- a/src/modules/fedimbed.js +++ b/src/modules/fedimbed.js @@ -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 ""; } - - 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";