From f24e645c62b848e1acf72eecc9db880fc61752f0 Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Mon, 23 Jun 2025 17:18:23 -0600 Subject: [PATCH] fedimbed: stupid but funny if works --- src/modules/fedimbed.js | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/modules/fedimbed.js b/src/modules/fedimbed.js index 5f26bce..9a5fa21 100644 --- a/src/modules/fedimbed.js +++ b/src/modules/fedimbed.js @@ -33,6 +33,7 @@ const PATH_REGEX = { //cohost: /^\/[A-Za-z0-9]+\/post\/\d+-[A-Za-z0-9-]+\/?/, bluesky: BSKY_POST_REGEX, twitter: /^\/([a-z0-9_]+)\/status\/(\d+)\/?/i, + truthsocial: /^\/@(.+?)\/posts\/\d+\/?/i, }; const PLATFORM_COLORS = { @@ -113,13 +114,22 @@ const numberFormatter = Intl.NumberFormat("en-US"); const domainCache = new Map(); domainCache.set("cohost.org", "cohost"); // no nodeinfo +function firefoxUseragent() { + const now = Math.floor(Date.now() / 1000); + const version = Math.floor(124 + (now - 1710892800) / 2419200); + + return `\`Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:${version}.0) Gecko/20100101 Firefox/${version}.0\``; +} + async function resolvePlatform(url) { const urlObj = new URL(url); if (domainCache.has(urlObj.hostname)) return domainCache.get(urlObj.hostname); + const ffua = firefoxUseragent(); + try { const res = await fetch(urlObj.origin + "/.well-known/nodeinfo", { - headers: {"User-Agent": FRIENDLY_USERAGENT}, + headers: {"User-Agent": urlObj.hostname === "truthsocial.com" ? ffua : FRIENDLY_USERAGENT}, }).then((res) => res.text()); if (!res.startsWith("{")) { @@ -137,7 +147,7 @@ async function resolvePlatform(url) { } const nodeinfo = await fetch(probe.links[probe.links.length - 1].href, { - headers: {"User-Agent": FRIENDLY_USERAGENT}, + headers: {"User-Agent": urlObj.hostname === "truthsocial.com" ? ffua : FRIENDLY_USERAGENT}, }).then((res) => res.json()); if (!nodeinfo?.software?.name) { @@ -171,7 +181,7 @@ async function getCrawledData(url, color, platformName) { try { const page = await fetch(url, { headers: { - "User-Agent": FRIENDLY_USERAGENT, + "User-Agent": urlObj.hostname === "truthsocial.com" ? firefoxUseragent() : FRIENDLY_USERAGENT, }, }) .then((res) => res.text()) @@ -761,13 +771,14 @@ async function bluesky(msg, url, spoiler = false, minimal = false) { async function fetchPost(url, platform, forceMastoAPI = false) { let urlObj = new URL(url); let postData; + const ffua = firefoxUseragent(); if (!forceMastoAPI) { let rawPostData; try { rawPostData = await signedFetch(url, { headers: { - "User-Agent": FRIENDLY_USERAGENT, + "User-Agent": urlObj.hostname === "truthsocial.com" ? ffua : FRIENDLY_USERAGENT, Accept: "application/activity+json", }, }).then((res) => res.text()); @@ -778,7 +789,7 @@ async function fetchPost(url, platform, forceMastoAPI = false) { try { rawPostData = await fetch(url, { headers: { - "User-Agent": FRIENDLY_USERAGENT, + "User-Agent": urlObj.hostname === "truthsocial.com" ? ffua : FRIENDLY_USERAGENT, Accept: "application/activity+json", }, }).then((res) => res.text()); @@ -831,6 +842,9 @@ async function fetchPost(url, platform, forceMastoAPI = false) { redirUrl = urlObj.origin + "/api/v1/statuses/" + postId; } else if (PATH_REGEX.mastodon2.test(urlObj.pathname)) { redirUrl = url.replace(/^\/(.+?)\/statuses/, "/api/v1/statuses"); + } else if (urlObj.hostname === "truthsocial.com") { + const postId = urlObj.pathname.match(PATH_REGEX.truthsocial)?.[2]; + redirUrl = urlObj.origin + "/api/v1/statuses/" + postId; } else if (PATH_REGEX.misskey.test(urlObj.pathname)) { let noteId = url.split("/notes/")[1]; if (noteId.indexOf("/") > -1) { @@ -867,7 +881,7 @@ async function fetchPost(url, platform, forceMastoAPI = false) { redirUrl, Object.assign(options, { headers: Object.assign(headers, { - "User-Agent": FRIENDLY_USERAGENT, + "User-Agent": urlObj.hostname === "truthsocial.com" ? ffua : FRIENDLY_USERAGENT, }), }) ).then((res) => res.text()); @@ -880,7 +894,7 @@ async function fetchPost(url, platform, forceMastoAPI = false) { redirUrl, Object.assign(options, { headers: Object.assign(headers, { - "User-Agent": FRIENDLY_USERAGENT, + "User-Agent": urlObj.hostname === "truthsocial.com" ? ffua : FRIENDLY_USERAGENT, }), }) ).then((res) => res.text());