mirror of
https://github.com/juherr/kill-the-news.git
synced 2026-06-20 22:03:48 +00:00
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 <noreply@anthropic.com>
This commit is contained in:
@@ -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", () => {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user