Leaflet Blog in Deno Fresh
at main 1.2 kB view raw
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};