fix(websub): add missing WebSub Link header to Atom feed

The RSS feed already advertised hub and self via the Link response
header, but the Atom feed was missing it entirely. Subscribers using
Atom had no way to discover the hub for real-time push notifications.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
Julien HerrandClaude Sonnet 4.6 committed 2026-05-21 23:46:51 +02:00
1 parent 5723fd36f9
commit bde06dd3e4
2 files changed
+14

No files matched your search

+8
View File
@@ -119,6 +119,14 @@ describe("Atom Feed Route", () => {
const body = await res.text();
expect(body).toContain(`/atom/${FEED_ID}`);
});
it("Link header advertises hub and self for WebSub discovery", async () => {
const res = await testApp.request(`/${FEED_ID}`, {}, mockEnv);
const link = res.headers.get("Link") ?? "";
expect(link).toContain(`rel="hub"`);
expect(link).toContain(`/atom/${FEED_ID}`);
expect(link).toContain(`rel="self"`);
});
});
describe("fallback config when no config in KV", () => {
+6
View File
@@ -51,11 +51,17 @@ export async function handle(c: Context): Promise<Response> {
const baseUrl = `https://${env.DOMAIN}`;
const atomXml = generateAtomFeed(feedConfig, emailsData, baseUrl, feedId);
const linkHeader = [
`<${baseUrl}/hub>; rel="hub"`,
`<${baseUrl}/atom/${feedId}>; rel="self"`,
].join(", ");
return new Response(atomXml, {
status: 200,
headers: {
"Content-Type": "application/atom+xml",
"Cache-Control": "max-age=1800",
Link: linkHeader,
},
});
} catch (error) {