1// KV round-trip through `event.context.cloudflare.env` — the dev suite
2// exercises it over the platform-proxy bridge (nitro's dev worker thread →
3// the host's workerd instance), the live suite over miniflare's KV.
4interface KvBinding {
5 get: (key: string) => Promise<string | null>;
6 put: (key: string, value: string) => Promise<void>;
7}
8
9export default defineEventHandler(async (event) => {
10 const env = (
11 event.context.cloudflare as { env?: Record<string, unknown> } | undefined
12 )?.env;
13 const kv = env?.FIXTURE_KV as KvBinding | undefined;
14 if (kv === undefined) {
15 throw createError({
16 statusCode: 500,
17 statusMessage: "FIXTURE_KV binding missing",
18 });
19 }
20 const query = getQuery(event);
21 const key = typeof query.key === "string" ? query.key : "e2e-key";
22 if (event.method === "POST") {
23 const value = typeof query.value === "string" ? query.value : "";
24 await kv.put(key, value);
25 return { put: true, key };
26 }
27 return { key, value: await kv.get(key) };
28});