UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines 1.35 kB
import{parseActivityBatchV1}from"#protocol/activity.js";import{resumeHook}from"#internal/workflow/runtime.js";const MAX_ACTIVITY_REQUEST_BYTES=131072;async function handleActivityRequest(e,t){let n=t.params.token;if(typeof n!=`string`||n.length<32||n.length>500)return Response.json({error:`Invalid activity sink.`,ok:!1},{status:400});if(!e.headers.get(`content-type`)?.toLowerCase().startsWith(`application/json`))return Response.json({error:`Activity sinks require JSON.`,ok:!1},{status:400});let r=Number(e.headers.get(`content-length`));if(Number.isFinite(r)&&r>MAX_ACTIVITY_REQUEST_BYTES)return Response.json({error:`Activity sink body is too large.`,ok:!1},{status:400});let i;try{i=await e.text()}catch{return Response.json({error:`Invalid activity sink body.`,ok:!1},{status:400})}if(new TextEncoder().encode(i).byteLength>MAX_ACTIVITY_REQUEST_BYTES)return Response.json({error:`Activity sink body is too large.`,ok:!1},{status:400});let a;try{a=JSON.parse(i)}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}let o=parseActivityBatchV1(a);if(o===void 0)return Response.json({error:`Invalid activity batch.`,ok:!1},{status:400});try{await resumeHook(n,o)}catch{return Response.json({error:`Activity collector not found.`,ok:!1},{status:404})}return Response.json({ok:!0},{status:202})}export{handleActivityRequest};