const C='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',L=4,H={'Access-Control-Allow-Origin':'*'} const r=()=>[...Array(L)].map(()=>C[Math.random()*C.length|0]).join('') export async function onRequest({request, env, next}){ if(request.method==='OPTIONS')return new Response(null,{headers:{...H,'Access-Control-Allow-Methods':'POST','Access-Control-Allow-Headers':'Content-Type'}}) const u=new URL(request.url) // Handle POST request to create a link (API call) if(u.pathname==='/api/create'&&request.method==='POST'){ try{ const{url:t}=await request.json(); new URL(t); let s; do s=r();while(await env.EV.get(s)); await env.EV.put(s,t); const d={slug:s,target:t,shortUrl:`${u.origin}/${s}`}; return new Response(JSON.stringify(d),{headers:{'Content-Type':'application/json',...H}}) }catch(e){ return new Response('Invalid URL',{status:400,headers:H}) } } // Handle GET request for a slug (Redirect) const p=u.pathname.slice(1) if(p){ const t=await env.EV.get(p) if(t)return Response.redirect(t,302) } // For all other requests (like GET /), pass them to the static asset handler. return next() }