import {memberPreviewAdminOrigin} from './lib/member-preview-origin';
import {referralCode,referralCookie,REFERRAL_COOKIE} from './lib/referrals';
import {NextResponse,type NextRequest} from 'next/server';
export function proxy(request:NextRequest){
 const development=process.env.NODE_ENV!=='production';
 const isMemberPreview=request.nextUrl.pathname==='/admin/member-profile-preview';
 const previewParent=isMemberPreview?memberPreviewAdminOrigin(process.env.ADMIN_URL,development):null;
 const nonce=btoa(String.fromCharCode(...crypto.getRandomValues(new Uint8Array(16))));
 const csp=`default-src 'self'; base-uri 'self'; object-src 'none'; frame-src https://verify.walletconnect.org https://verify.walletconnect.com; frame-ancestors ${previewParent||"'none'"}; form-action ${isMemberPreview?"'none'":"'self'"}; img-src 'self' ${isMemberPreview?'':'https: '}data:; media-src 'self' https:; font-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' ${development?"'unsafe-inline' 'unsafe-eval'":`'nonce-${nonce}'`}; connect-src 'self' https://relay.walletconnect.com wss://relay.walletconnect.com https://relay.walletconnect.org wss://relay.walletconnect.org https://rpc.walletconnect.org https://pulse.walletconnect.org https://verify.walletconnect.org https://verify.walletconnect.com${development?' ws: wss:':''}`;
 const effectiveCsp=isMemberPreview?csp.replace(/connect-src[^;]*/,"connect-src 'none'").replace(/frame-src[^;]*/,"frame-src 'none'"):csp;
 const requestHeaders=new Headers(request.headers);requestHeaders.set('Content-Security-Policy',effectiveCsp);requestHeaders.set('x-nonce',nonce);
 const response=NextResponse.next({request:{headers:requestHeaders}});
 response.headers.set('X-Content-Type-Options','nosniff');response.headers.set('Referrer-Policy','strict-origin-when-cross-origin');if(!previewParent)response.headers.set('X-Frame-Options','DENY');response.headers.set('Permissions-Policy','camera=(), microphone=(), geolocation=()');response.headers.set('Content-Security-Policy',effectiveCsp);response.headers.set('Cache-Control','no-store');
 const invitation=referralCode(request.nextUrl.searchParams.get('ref'));
 if(!isMemberPreview&&request.method==='GET'&&invitation&&!referralCookie(request.headers.get('cookie')||''))response.cookies.set(REFERRAL_COOKIE,invitation,{path:'/',maxAge:2592000,sameSite:'lax',secure:!development||request.nextUrl.protocol==='https:'});
 if(!development||request.nextUrl.protocol==='https:')response.headers.set('Strict-Transport-Security','max-age=31536000');return response;
}
export const config={matcher:['/((?!_next/static|_next/image|favicon.svg|images|fonts).*)']};
