import { getPosts } from "@/lib/ghost"; import { NextResponse } from "next/server"; function escapeXml(unsafe: string): string { return unsafe.replace(/[<>&'"]/g, (c) => { switch (c) { case "<": return "<"; case ">": return ">"; case "&": return "&"; case "'": return "'"; case '"': return """; default: return c; } }); } export async function GET() { const posts = await getPosts(); const rss = ` Dokploy Blog https://dokploy.com/blog Dokploy Latest News & Updates en ${new Date().toUTCString()} ${posts .map( (post) => ` <![CDATA[${post.title}]]> https://dokploy.com/blog/${escapeXml(post.slug)} https://dokploy.com/blog/${escapeXml(post.slug)} ${new Date(post.published_at).toUTCString()} ${ post.feature_image ? `` : "" } ${ post.primary_author ? `` : "" } `, ) .join("\n")} `; return new NextResponse(rss, { headers: { "Content-Type": "application/xml; charset=utf-8", "Cache-Control": "s-maxage=3600, stale-while-revalidate", }, }); }