/* V8.28: untrusted display state only; final authorization always on server. */ (function(root,factory){const api=factory();if(typeof module==='object'&&module.exports)module.exports=api;else root.SiteForgeLaunch=api;})(typeof window!=='undefined'?window:this,function(){ 'use strict'; const finished=new Set(['complete','completed','done','success']); function plan({site=null,build=null,requests=[],requestsKnown=false,delivery={},target='staging',previewChecked=false,preflight=null}={}){ const version=build&&finished.has(build.status)?build:null; const bids=version?.id; const rows=Array.isArray(requests)?requests.filter(x=>x.build_id===bids):[]; const approval=rows.some(x=>x.state==='approved')?'approved':rows.some(x=>x.state==='pending')?'pending':rows.some(x=>x.state==='rejected')?'rejected':requestsKnown&&Array.isArray(requests)?'none':'unknown'; const safeTarget=['staging','production'].includes(target)?target:'staging'; const preflightReady=Boolean(version&&preflight?.siteId===site?.id&&preflight?.buildId===version.id&&preflight?.target===safeTarget&&preflight?.ready===true); const preflightMessage=preflightReady?'服务器已通过检查,部署时还会重新验证。':preflight?.siteId===site?.id&&preflight?.buildId===bids?preflight.message:'尚未完成此版本的发布前检查'; const configured=delivery?.configured?.[safeTarget]===true; const canDeploy=Boolean(version&&previewChecked&&approval==='approved'&&preflightReady&&configured); const history=Array.isArray(delivery?.history)?delivery.history:[]; const matches=history.filter(x=>x.target===safeTarget&&x.release_id&&x.build_id===bids); return {approval,canDeploy,preflightReady,preflightMessage,hasRemoteRecord:matches.length>0, remoteDescription:matches.length?'存在当前版本的部署记录,但尚需实际访问确认。':'尚无当前版本在该环境的部署记录。',configured, target:safeTarget,hasBuild:!!version}; } return {plan}; });