| 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. |
| 4 | interface KvBinding { |
| 5 | get: (key: string) => Promise<string | null>; |
| 6 | put: (key: string, value: string) => Promise<void>; |
| 7 | } |
| 8 | |
| 9 | export 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 | }); |