// Retained pre-archive demo receipts keep their original inspector. // @requirements REQ-EU-ORDER-ACTION REQ-PRODUCT-DEMO-WORKSPACE REQ-PRODUCT-A11Y REQ-PRODUCT-MOBILE import {renderWorkspaceShell,escapeHtml as e} from '../packages/notabenda-cf/dist/render.js'; import {renderPaidOrderReview,normalizePaidOrderReview,formatPaidOrderMoney} from 'notabenda/orders'; import {adminPresentation} from './admin-presentation.mjs'; const base='/demo/admin/orders',prefix='demo/orders/received/'; export async function legacyOrderDemoAdmin(request,storage){ const url=new URL(request.url);if(request.method!=='GET')return new Response('Method not allowed.',{status:405}); const nonce=crypto.randomUUID().replaceAll('-',''),query=url.searchParams.get('q')??'';if(query.length>200)return new Response('Search is too long.',{status:400}); let body; if(url.pathname===base+'/record'){ const id=url.searchParams.get('id');if(!/^[a-f0-9]{64}$/u.test(id??''))return new Response('Invalid record.',{status:400});const record=await storage.get(prefix+id);if(!record)return new Response('Not found.',{status:404}); const review=normalizePaidOrderReview(record.review,{allowPreview:true}); body=`
← Order requests

REQUEST RECEIVED

Order request

RequestReceived
PaymentNot performed
ContractNot formed
ConfirmationNot sent

Request context

${[['Request ID',record.request.requestId],['Quote',record.request.quoteId],['Quote revision',record.request.quoteRevision],['Review ID',record.request.reviewId],['Definition ID',record.request.definitionId],['Quote expires',review.quote.expiresAt],['Payment action shown',review.definition.wording.paymentActionLabel]].map(([label,value])=>`
${label}
${e(value)}
`).join('')}

Information presented

The exact definition and quote retained with this request. Receipt is separate from payment, fulfillment and contract confirmation.

${renderPaidOrderReview(review,{idPrefix:'stored-order',headingLevel:3,allowPreview:true})}
`; }else if(url.pathname===base||url.pathname===base+'/'){ const stored=await storage.list({prefix,limit:200}),records=[...stored].map(([key,data])=>({id:key.slice(prefix.length),...data})).filter(r=>{const values=[r.request.requestId,r.request.quoteId,r.request.reviewId,...r.review.definition.items.map(i=>i.name)];return values.some(v=>v.toLocaleLowerCase('en').includes(query.toLocaleLowerCase('en')));}).sort((a,b)=>b.receivedAt.localeCompare(a.receivedAt)); body=`

CHECKOUT HISTORY

Order requests

Inspect the information and quote associated with each received request.

${records.length} ${records.length===1?'request':'requests'}

${records.length?records.map(r=>{const p=r.review.quote.pricing,total=p.totalPrice.kind==='fixed'?formatPaidOrderMoney(p.totalPrice.amountMinor,p,'en'):'Variable total',due=p.dueNow.kind==='fixed'?formatPaidOrderMoney(p.dueNow.amountMinor,p,'en'):'Calculated';return `
Received

${e(r.review.definition.items.map(i=>i.name).join(' + '))}

${e(new Date(r.receivedAt).toUTCString())}

Request ${e(r.request.requestId)}
${e(total)}${e(due)} due now
`;}).join(''):'

No matching requests

Try an order example, or search for another product or request ID.

Open the order example ↗
'}
`; }else return new Response('Not found.',{status:404}); const html=renderWorkspaceShell(body,{...adminPresentation('/demo/admin'),basePath:base,title:'Order requests',scopeLabel:'Your demo workspace',nonce},''); return new Response(html,{headers:{'Content-Type':'text/html; charset=utf-8','Content-Security-Policy':`default-src 'none'; style-src 'self' 'nonce-${nonce}'; img-src 'self'; base-uri 'none'; form-action 'self'; frame-ancestors 'none'`}}); }