+30
-2
server/index.ts
+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>;