diff --git a/packages/gitbook-v2/src/middleware.ts b/packages/gitbook-v2/src/middleware.ts index d413d6a435..0a813a3b57 100644 --- a/packages/gitbook-v2/src/middleware.ts +++ b/packages/gitbook-v2/src/middleware.ts @@ -90,7 +90,7 @@ async function serveSiteRoutes(requestURL: URL, request: NextRequest) { url: siteRequestURL, }); - const withAPIToken = async (apiToken: string | null) => { + const withAPIToken = async (apiToken: string | null, headers?: { [key: string]: string }) => { const siteURLData = await throwIfDataError( lookupPublishedContentByUrl({ url: siteRequestURL.toString(), @@ -265,6 +265,10 @@ async function serveSiteRoutes(requestURL: URL, request: NextRequest) { }, }); + Object.entries(headers ?? {}).forEach(([key, value]) => { + response.headers.set(key, value); + }); + // Add Content Security Policy header response.headers.set('content-security-policy', getContentSecurityPolicy()); // Basic security headers @@ -284,7 +288,11 @@ async function serveSiteRoutes(requestURL: URL, request: NextRequest) { // We scope the API token to the site ID. `${siteRequestURL.hostname}/${requestURL.pathname.slice(1).split('/')[0]}`, request, - withAPIToken + (apiToken) => + // Do not track page views for preview requests + withAPIToken(apiToken, { + 'x-gitbook-track-page-views': '0', + }) ); } diff --git a/packages/gitbook/src/lib/tracking.ts b/packages/gitbook/src/lib/tracking.ts index 7c52a01d0c..1a26c4f623 100644 --- a/packages/gitbook/src/lib/tracking.ts +++ b/packages/gitbook/src/lib/tracking.ts @@ -6,13 +6,18 @@ import { headers } from 'next/headers'; export async function shouldTrackEvents(): Promise { const headersList = await headers(); - if ( - process.env.NODE_ENV === 'development' || - (process.env.GITBOOK_BLOCK_PAGE_VIEWS_TRACKING && - !headersList.has('x-gitbook-track-page-views')) - ) { + // No tracking in development mode + if (process.env.NODE_ENV === 'development') { return false; } - return true; + const headerValue = headersList.get('x-gitbook-track-page-views'); + + // No tracking if environment variable is set and header does not override it. + if (process.env.GITBOOK_BLOCK_PAGE_VIEWS_TRACKING && headerValue !== null) { + return false; + } + + // Passing a 0 will disable tracking + return headerValue !== '0'; }