Leaflet Blog in Deno Fresh
1import { Handlers } from "$fresh/server.ts";
2import { IdResolver } from "npm:@atproto/identity";
3
4const idResolver = new IdResolver();
5
6export const handler: Handlers = {
7 async GET(req) {
8 const url = new URL(req.url);
9 const did = url.searchParams.get("did") ?? "";
10 const cid = url.searchParams.get("cid") ?? "";
11
12 if (!did || !cid) {
13 return new Response("Missing did or cid", { status: 404 });
14 }
15
16 const identity = await idResolver.did.resolve(did);
17 const service = identity?.service?.find((f: any) =>
18 f.id === "#atproto_pds"
19 );
20 if (!service) {
21 return new Response("No PDS service found", { status: 404 });
22 }
23
24 const blobUrl =
25 `${service.serviceEndpoint}/xrpc/com.atproto.sync.getBlob?did=${did}&cid=${cid}`;
26 const response = await fetch(blobUrl);
27
28 if (!response.ok) {
29 return new Response("Blob not found", { status: 404 });
30 }
31
32 // Clone the response to modify headers
33 const cachedResponse = new Response(response.body, response);
34 cachedResponse.headers.set(
35 "Cache-Control",
36 "public, max-age=31536000, immutable",
37 );
38
39 return cachedResponse;
40 },
41};