personal web client for Bluesky
typescript solidjs bluesky atcute

feat: cache resolution requests

mary.my.id be674564 ad8ad8be

verified
Changed files
+30 -2
server
+30 -2
server/index.ts
··· 29 29 }, 30 30 }); 31 31 32 - const router = new XRPCRouter(); 32 + const cache = caches.default; 33 + const contexts = new WeakMap<Request, ExecutionContext>(); 34 + 35 + const router = new XRPCRouter({ 36 + middlewares: [ 37 + async (request, next) => { 38 + let response = await cache.match(request); 39 + if (response === undefined) { 40 + response = await next(request); 41 + 42 + if (response.status === 200 && response.headers.has('cache-control')) { 43 + const ctx = contexts.get(request); 44 + if (ctx) { 45 + ctx.waitUntil(cache.put(request, response.clone())); 46 + } else { 47 + await cache.put(request, response.clone()); 48 + } 49 + } 50 + } 51 + 52 + return response; 53 + }, 54 + ], 55 + }); 33 56 34 57 router.add(ComAtprotoIdentityResolveHandle.mainSchema, { 35 58 async handler({ params: { handle } }) { ··· 86 109 }, 87 110 }); 88 111 89 - export default { fetch: router.fetch } satisfies ExportedHandler<Env>; 112 + export default { 113 + fetch(request, _env, ctx) { 114 + contexts.set(request, ctx); 115 + return router.fetch(request); 116 + }, 117 + } satisfies ExportedHandler<Env>;