import {env} from 'cloudflare:workers'; import {z} from 'zod'; import {requireAleBridge} from '@/core/ale-auth'; import {recordAleEvent} from '@/core/ale-store'; import {queueSocialEncounter} from '@/core/conversation-store'; import {D1Store} from '@/core/store'; import {applyAuthoritativeAleSnapshots} from '@/core/service'; import type {RuntimeConfig} from '@/core/types'; const schema=z.object({payloads:z.array(z.record(z.unknown())).min(1).max(64)}).strict(); export async function POST(request:Request){ try{ requireAleBridge(request,env as unknown as RuntimeConfig); const text=await request.text(); if(text.length>512000)return Response.json({error:'Snapshot batch too large'},{status:413}); const {payloads}=schema.parse(JSON.parse(text)); const result=await applyAuthoritativeAleSnapshots(new D1Store(),payloads); for(const payload of payloads){ await recordAleEvent(env.DB!,'player.snapshot',payload); if(payload.roster===true)await queueSocialEncounter(env.DB!,payload); } return Response.json(result); }catch(e){ const error=e instanceof Error?e.message:'Snapshot batch failure'; return Response.json({error},{status:error.startsWith('Unauthorized')?401:400}); } }