fix(patches): add internal URL rewrite to webmention livefetch
The livefetch patch was fetching postUrl (the public HTTPS URL) which fails behind the nginx jail. Now rewrites to INTERNAL_FETCH_URL so the live page fetch goes through nginx on the internal network. Without this, likes/reposts/bookmarks fall back to stored content which has no microformat links, resulting in 0 webmentions sent. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -76,16 +76,27 @@ const retryPatchedBlock = ` // If no content, try fetching the published
|
|||||||
const newBlock = ` // [patched:livefetch] Always fetch the live page so template-rendered links
|
const newBlock = ` // [patched:livefetch] Always fetch the live page so template-rendered links
|
||||||
// (u-in-reply-to, u-like-of, u-bookmark-of, u-repost-of, etc.) are included.
|
// (u-in-reply-to, u-like-of, u-bookmark-of, u-repost-of, etc.) are included.
|
||||||
// Stored content only has the post body, not these microformat links.
|
// Stored content only has the post body, not these microformat links.
|
||||||
|
// Rewrite public URL to internal URL for jailed setups where the server
|
||||||
|
// can't reach its own public HTTPS URL.
|
||||||
let contentToProcess = "";
|
let contentToProcess = "";
|
||||||
try {
|
try {
|
||||||
|
const _wmInternalBase = (() => {
|
||||||
|
if (process.env.INTERNAL_FETCH_URL) return process.env.INTERNAL_FETCH_URL.replace(/\\\\/+$/, "");
|
||||||
|
const port = process.env.PORT || "3000";
|
||||||
|
return \\\`http://localhost:\\\${port}\\\`;
|
||||||
|
})();
|
||||||
|
const _wmPublicBase = (process.env.PUBLICATION_URL || process.env.SITE_URL || "").replace(/\\\\/+$/, "");
|
||||||
|
const fetchUrl = (_wmPublicBase && postUrl.startsWith(_wmPublicBase))
|
||||||
|
? _wmInternalBase + postUrl.slice(_wmPublicBase.length)
|
||||||
|
: postUrl;
|
||||||
const _ac = new AbortController();
|
const _ac = new AbortController();
|
||||||
const _timeout = setTimeout(() => _ac.abort(), 15000);
|
const _timeout = setTimeout(() => _ac.abort(), 15000);
|
||||||
const pageResponse = await fetch(postUrl, { signal: _ac.signal });
|
const pageResponse = await fetch(fetchUrl, { signal: _ac.signal });
|
||||||
clearTimeout(_timeout);
|
clearTimeout(_timeout);
|
||||||
if (pageResponse.ok) {
|
if (pageResponse.ok) {
|
||||||
contentToProcess = await pageResponse.text();
|
contentToProcess = await pageResponse.text();
|
||||||
} else {
|
} else {
|
||||||
console.log(\`[webmention] Live page returned \${pageResponse.status} for \${postUrl}\`);
|
console.log(\`[webmention] Live page returned \${pageResponse.status} for \${fetchUrl}\`);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(\`[webmention] Could not fetch live page for \${postUrl}: \${error.message}\`);
|
console.log(\`[webmention] Could not fetch live page for \${postUrl}: \${error.message}\`);
|
||||||
|
|||||||
Reference in New Issue
Block a user