export function buildMissionControlCsp(input: { nonce: string; googleEnabled: boolean }): string { const { nonce, googleEnabled } = input return [ `default-src 'self'`, `base-uri 'self'`, `object-src 'none'`, `frame-ancestors 'self' https://huggingface.co https://*.hf.space`, `script-src 'self' 'nonce-${nonce}' 'strict-dynamic' blob:${googleEnabled ? ' https://accounts.google.com' : ''}`, `style-src 'self' 'unsafe-inline'`, `style-src-elem 'self' 'unsafe-inline'`, `style-src-attr 'unsafe-inline'`, `connect-src 'self' ws: wss: http://127.0.0.1:* http://localhost:* https://cdn.jsdelivr.net`, `img-src 'self' data: blob:${googleEnabled ? ' https://*.googleusercontent.com https://lh3.googleusercontent.com' : ''}`, `font-src 'self' data:`, `frame-src 'self'${googleEnabled ? ' https://accounts.google.com' : ''}`, `worker-src 'self' blob:`, ].join('; ') } export function buildNonceRequestHeaders(input: { headers: Headers nonce: string googleEnabled: boolean }): Headers { const requestHeaders = new Headers(input.headers) const csp = buildMissionControlCsp({ nonce: input.nonce, googleEnabled: input.googleEnabled }) requestHeaders.set('x-nonce', input.nonce) requestHeaders.set('Content-Security-Policy', csp) return requestHeaders }