  useEffect(()=>{
    let busy=false;
    const receive=async(event:MessageEvent)=>{
      const request=event.data;
      if(event.origin!==location.origin||event.source!==window.parent||request?.channel!=="skaperstudio-cloud-v1"||!["open","can-open"].includes(request.type))return;
      const reply=(value:Record<string,unknown>)=>window.parent.postMessage({channel:"skaperstudio-cloud-v1",id:request.id,...value},location.origin);
      if(request.type==="can-open"){reply({ok:true});return}
      if(busy){reply({error:"busy"});return}busy=true;
      try{
        if(!(request.data instanceof Uint8Array)||request.data.length>20*1024*1024)throw Error('invalid_file');
        const result=await openLaunchedFileRef.current(new File([request.data],request.title+'.lyl',{type:LYL_MEDIA_TYPE}));
        reply(result?.ok?{ok:true}:{error:result?.message||'open_failed'});
      }catch(error){reply({error:error instanceof Error?error.message:'open_failed'})}finally{busy=false}
    };
    window.addEventListener('message',receive);return()=>window.removeEventListener('message',receive);
  },[]);
