import type {IncomingMessage} from 'node:http'; import {series} from './series'; import {parameters,uuid} from './layout-parameters'; import fixedLayouts from '../content/templates/layouts.json'; import standardLayout from '../content/standard-layout.json'; const layouts=[...fixedLayouts,standardLayout]; import type {Design} from './native-layout'; /** Only forward the session to our fixed private Wiki service, never a request Host. */ export async function readDesign(id:unknown,req:IncomingMessage):Promise{ if(!uuid(id))return null; const origin=process.env.STUDIO_WIKI_ORIGIN||`http://127.0.0.1:${process.env.PORT || '3000'}`; const headers:Record={}; if(req.headers.cookie)headers.cookie=req.headers.cookie; if(req.headers.authorization)headers.authorization=req.headers.authorization; const response=await fetch(`${origin}/api/studio/designs/${id}`,{headers,redirect:'error',cache:'no-store',signal:AbortSignal.timeout(8000)}); if(response.status===404||response.status===400)return null; if(!response.ok)throw new Error('Saved layout service unavailable'); const {design}=await response.json() as {design:Design}; const layout=layouts.find(l=>l.id===design.layoutId); if(!layout||design.id!==id)throw new Error('Invalid saved layout'); if((design as Design&{archived?:boolean}).archived)return null; return {...design,...(design.document?{document:series(design.document,layouts)}:{}),parameters:parameters(layout,design.parameters)}; }