import type { Actions, PageServerLoad } from "../../$types"; const COUNTER_KEY = "front-page-counter"; const DO_COUNTER_NAME = "counter-instance"; async function readCount(platform: App.Platform | undefined) { const env = platform?.env as Env | undefined; const value = await env?.COUNTER_KV.get(COUNTER_KEY); const parsed = Number.parseInt(value ?? "0", 10); return Number.isFinite(parsed) ? parsed : 0; } function getCounterStub(platform: App.Platform | undefined) { const env = platform?.env as Env | undefined; const id = env?.DO_COUNTER.idFromName(DO_COUNTER_NAME); return id && env ? env.DO_COUNTER.get(id) : undefined; } async function readDoCount(platform: App.Platform | undefined) { const response = await getCounterStub(platform)?.fetch("https://do/count"); const payload = (await response?.json()) as { count?: number } | undefined; return payload?.count ?? 0; } async function readDoRpcCount(platform: App.Platform | undefined) { const stub = getCounterStub(platform); return stub ? await stub.getRpcCount() : 0; } async function readDoWsCount(platform: App.Platform | undefined) { const stub = getCounterStub(platform); return stub ? await stub.getWsCount() : 0; } async function incrementDoCount(platform: App.Platform | undefined) { const response = await getCounterStub(platform)?.fetch( "https://do/increment", { method: "POST", }, ); const payload = (await response?.json()) as { count?: number } | undefined; return payload?.count ?? 0; } async function incrementDoRpcCount(platform: App.Platform | undefined) { const stub = getCounterStub(platform); return stub ? await stub.incrementRpcCount() : 0; } export const load: PageServerLoad = async ({ platform }) => ({ count: await readCount(platform), doCount: await readDoCount(platform), doRpcCount: await readDoRpcCount(platform), doWsCount: await readDoWsCount(platform), }); export const actions: Actions = { incrementKv: async ({ platform }) => { const env = platform?.env as Env | undefined; const nextCount = (await readCount(platform)) + 1; await env?.COUNTER_KV.put(COUNTER_KEY, String(nextCount)); return { ok: true }; }, incrementDo: async ({ platform }) => { await incrementDoCount(platform); return { ok: true }; }, incrementDoRpc: async ({ platform }) => { await incrementDoRpcCount(platform); return { ok: true }; }, };