Batch authoritative snapshots and bound rejected retreat fallback

This commit is contained in:
Codex
2026-09-25 09:24:51 +08:00
parent d573ae2345
commit 9d1575b8c6
6 changed files with 81 additions and 5 deletions
+26
View File
@@ -0,0 +1,26 @@
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});
}
}