nook release changelog api available
This commit is contained in:
35
src/routes/api/the-nook/releases.json.ts
Normal file
35
src/routes/api/the-nook/releases.json.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import type { APIEvent } from "@solidjs/start/server";
|
||||
import { collectReleases } from "./_releases";
|
||||
import { error } from "./_lib";
|
||||
|
||||
/**
|
||||
* GET /api/the-nook/releases.json
|
||||
*
|
||||
* The release list behind The Nook's Settings > Changelog tab, newest first:
|
||||
* `{ releases: [{ version, build, date, sections: [{ title, bullets }] }] }`.
|
||||
*
|
||||
* Same source as /changelog — the Sparkle appcast plus the checked-in archive
|
||||
* of releases older than its retention — so the app and the website tell one
|
||||
* story. Section titles and ISO dates instead of HTML keep the client from
|
||||
* parsing markup it would only take apart again.
|
||||
*
|
||||
* Five-minute cache, in step with the appcast route. An unreadable appcast is
|
||||
* a 503 rather than an archived-only 200: the app keeps the newest release in
|
||||
* its own bundle and falls back to it, which beats showing stale notes as if
|
||||
* they were current.
|
||||
*/
|
||||
export async function GET(_event: APIEvent) {
|
||||
try {
|
||||
const releases = await collectReleases();
|
||||
return new Response(JSON.stringify({ releases }), {
|
||||
status: 200,
|
||||
headers: {
|
||||
"Content-Type": "application/json; charset=utf-8",
|
||||
"Cache-Control": "public, max-age=300"
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
console.error("Failed to build the Nook release list:", err);
|
||||
return error("Release list unavailable", 503);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user