{"version":3,"sources":["../../package.json","../../src/middleware/index.ts"],"names":["version","createPreprMiddleware","request","responseOrOptions","options","_a","_b","_c","_d","_e","response","finalOptions","NextResponse","value","key","referrer","userAgent","ip","ipAddress","hutkCookie","cookie","isLivePreview","segmentCookie","abCookie"],"mappings":"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","file":"index.cjs","sourcesContent":["{\n  \"name\": \"@preprio/prepr-nextjs\",\n  \"version\": \"2.2.6\",\n  \"description\": \"Next.js package for Prepr CMS preview functionality with advanced debugging and visual editing capabilities\",\n  \"main\": \"dist/react/index.cjs\",\n  \"types\": \"./dist/react/index.d.ts\",\n  \"module\": \"./dist/react/index.js\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"dev\": \"tsup --watch\",\n    \"clean\": \"rm -rf dist\",\n    \"check\": \"tsc --noEmit && eslint src --ext .ts,.tsx && prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json,md}\\\"\",\n    \"fix\": \"eslint src --ext .ts,.tsx --fix && prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json,md}\\\"\",\n    \"changeset\": \"changeset\",\n    \"version\": \"changeset version\",\n    \"release\": \"pnpm run build && changeset publish\",\n    \"prepublishOnly\": \"pnpm run check && pnpm run build\"\n  },\n  \"exports\": {\n    \"./middleware\": {\n      \"import\": \"./dist/middleware/index.js\",\n      \"types\": \"./dist/middleware/index.d.ts\",\n      \"require\": \"./dist/middleware/index.cjs\"\n    },\n    \"./server\": {\n      \"import\": \"./dist/server/index.js\",\n      \"types\": \"./dist/server/index.d.ts\",\n      \"require\": \"./dist/server/index.cjs\"\n    },\n    \"./react\": {\n      \"import\": \"./dist/react/index.js\",\n      \"types\": \"./dist/react/index.d.ts\",\n      \"require\": \"./dist/react/index.cjs\"\n    },\n    \"./utils\": {\n      \"import\": \"./dist/utils/index.js\",\n      \"types\": \"./dist/utils/index.d.ts\",\n      \"require\": \"./dist/utils/index.cjs\"\n    },\n    \"./types\": {\n      \"import\": \"./dist/types/index.js\",\n      \"types\": \"./dist/types/index.d.ts\",\n      \"require\": \"./dist/types/index.cjs\"\n    },\n    \"./index.css\": {\n      \"import\": \"./dist/index.css\",\n      \"require\": \"./dist/index.css\"\n    }\n  },\n  \"files\": [\n    \"dist\",\n    \"package.json\"\n  ],\n  \"keywords\": [\n    \"prepr\",\n    \"cms\",\n    \"nextjs\",\n    \"preview\",\n    \"visual-editing\",\n    \"headless-cms\",\n    \"react\",\n    \"typescript\",\n    \"debug\",\n    \"stega\"\n  ],\n  \"author\": \"Preprio\",\n  \"license\": \"MIT\",\n  \"packageManager\": \"pnpm@10.5.2\",\n  \"devDependencies\": {\n    \"@changesets/cli\": \"^2.30.0\",\n    \"@eslint/js\": \"^9.39.2\",\n    \"@types/node\": \"^25.4.0\",\n    \"@types/react\": \"19.2.14\",\n    \"@types/react-dom\": \"19.2.3\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.57.0\",\n    \"@typescript-eslint/parser\": \"^8.57.0\",\n    \"autoprefixer\": \"^10.4.27\",\n    \"cssnano\": \"^7.1.3\",\n    \"eslint\": \"^9.39.2\",\n    \"eslint-config-prettier\": \"^10.1.8\",\n    \"eslint-plugin-prettier\": \"^5.5.5\",\n    \"eslint-plugin-react\": \"^7.37.5\",\n    \"eslint-plugin-react-hooks\": \"^7.0.1\",\n    \"next\": \"16.1.6\",\n    \"postcss\": \"^8.5.8\",\n    \"prettier\": \"^3.8.1\",\n    \"prettier-plugin-tailwindcss\": \"^0.7.2\",\n    \"react\": \"^19.2.4\",\n    \"react-dom\": \"^19.2.4\",\n    \"tailwindcss\": \"^3.4.17\",\n    \"tsup\": \"^8.5.1\",\n    \"typescript\": \"^5.9.3\"\n  },\n  \"peerDependencies\": {\n    \"next\": \"^16.0.3 || ^15.0.5 || ^15.1.9 || ^15.2.6 || ^15.3.6 || ^15.4.8 || ^15.5.7 || ^14.0.0 || ^13.0.0\",\n    \"react\": \"^19.0.0 || ^18.0.0 || ^17.0.0 \",\n    \"react-dom\": \"^19.0.0 || ^18.0.0 || ^17.0.0\"\n  },\n  \"pnpm\": {\n    \"overrides\": {\n      \"fast-xml-parser\": \"^5.5.0\"\n    }\n  },\n  \"overrides\": {\n    \"fast-xml-parser\": \"^5.5.0\"\n  },\n  \"resolutions\": {\n    \"fast-xml-parser\": \"^5.5.0\"\n  },\n  \"dependencies\": {\n    \"@headlessui/react\": \"^2.2.9\",\n    \"@vercel/functions\": \"^3.4.3\",\n    \"@vercel/stega\": \"^1.0.0\",\n    \"clsx\": \"^2.1.1\",\n    \"postcss-cli\": \"^11.0.1\",\n    \"tailwind-merge\": \"^3.5.0\",\n    \"zustand\": \"^5.0.11\"\n  }\n}\n","import { ipAddress } from '@vercel/functions';\nimport { NextRequest, NextResponse } from 'next/server';\nimport { version } from '../../package.json';\n\nexport interface PreprMiddlewareOptions {\n  preview?: boolean;\n}\n\n/**\n * Middleware to set Prepr headers for personalization.\n *\n * @overload\n * @param request - NextRequest object\n * @param options - Options object\n * @returns NextResponse with Prepr headers set\n */\nexport default function createPreprMiddleware(\n  request: NextRequest,\n  options?: PreprMiddlewareOptions\n): NextResponse;\n\n/**\n * Middleware to set Prepr headers for personalization.\n *\n * @overload\n * @param request - NextRequest object\n * @param response - NextResponse object to chain with\n * @param options - Options object\n * @returns NextResponse with Prepr headers set\n */\nexport default function createPreprMiddleware(\n  request: NextRequest,\n  response: NextResponse,\n  options?: PreprMiddlewareOptions\n): NextResponse;\n\n/**\n * Implementation of createPreprMiddleware with function overloads\n */\nexport default function createPreprMiddleware(\n  request: NextRequest,\n  responseOrOptions?: NextResponse | PreprMiddlewareOptions,\n  options?: PreprMiddlewareOptions\n): NextResponse {\n  let response: NextResponse;\n  let finalOptions: PreprMiddlewareOptions | undefined;\n\n  // Handle overloads\n  if (responseOrOptions && 'headers' in responseOrOptions) {\n    // Second parameter is NextResponse\n    response = responseOrOptions;\n    finalOptions = options;\n  } else {\n    // Second parameter is options or undefined\n    response = NextResponse.next();\n    finalOptions = responseOrOptions as PreprMiddlewareOptions | undefined;\n  }\n\n  // Map over search params and set headers\n  request.nextUrl.searchParams.forEach((value, key) => {\n    switch (key) {\n      case 'utm_source':\n        response.headers.set('Prepr-Context-utm_source', value);\n        break;\n      case 'utm_medium':\n        response.headers.set('Prepr-Context-utm_medium', value);\n        break;\n      case 'utm_term':\n        response.headers.set('Prepr-Context-utm_term', value);\n        break;\n      case 'utm_content':\n        response.headers.set('Prepr-Context-utm_content', value);\n        break;\n      case 'utm_campaign':\n        response.headers.set('Prepr-Context-utm_campaign', value);\n        break;\n    }\n  });\n\n  // Set initial referral header\n  const referrer = request.headers.get('referer');\n  if (referrer) {\n    response.headers.set('Prepr-Context-initial_referral', referrer);\n  }\n\n  // Forward browser User-Agent for device detection on the API side\n  const userAgent = request.headers.get('user-agent');\n  if (userAgent) {\n    response.headers.set('Prepr-User-Agent', userAgent);\n  }\n\n  // Set Prepr version header\n  response.headers.set('Prepr-Package', version);\n\n  let ip: string | null = ipAddress(request) || null;\n\n  if (request.headers.get('Cf-Connecting-Ip')) {\n    ip = request.headers.get('Cf-Connecting-Ip');\n  }\n\n  if (ip) {\n    response.headers.set('Prepr-Visitor-IP', ip);\n  }\n\n  // Set HubSpot cookie header\n  const hutkCookie = request.cookies.get('hubspotutk')?.value;\n  if (hutkCookie) {\n    response.headers.set('Prepr-Hubspot-Id', hutkCookie);\n  }\n\n  // Check for existing Prepr UID cookie or create a new one\n  let cookie = request.cookies.get('__prepr_uid')?.value;\n  if (!cookie) {\n    cookie = crypto.randomUUID();\n    response.cookies.set('__prepr_uid', cookie, {\n      maxAge: 1 * 365 * 24 * 60, // Set for one year\n    });\n    response.headers.set('Prepr-Customer-Id-Created', 'true');\n  }\n\n  // Set the Prepr Customer ID header\n  response.headers.set('Prepr-Customer-Id', cookie);\n\n  // If preview mode is not enabled, return the response\n  if (!finalOptions?.preview || process.env.PREPR_ENV !== 'preview') {\n    return response;\n  }\n\n  // Preview query params always take priority — when the CMS dashboard\n  // loads the site in an iframe it controls segments via query params,\n  // regardless of the user's Prepr-Preview-Mode cookie in the browser.\n  const hasPreviewParams =\n    request.nextUrl.searchParams.has('prepr_preview_segment') ||\n    request.nextUrl.searchParams.has('prepr_preview_ab');\n\n  if (!hasPreviewParams) {\n    // Respect preview mode toggle cookie from client\n    const previewModeCookie = request.cookies.get('Prepr-Preview-Mode')?.value;\n    const previewModeEnabled = previewModeCookie !== 'false';\n\n    if (!previewModeEnabled) {\n      return response;\n    }\n  }\n\n  // If preview mode is enabled, set additional headers\n  response.headers.set('Prepr-Preview-Bar', 'true');\n\n  // When loaded inside the Prepr live preview iframe, prepr_hide_bar=true is\n  // always present in the URL. In that context, cookies must never be used —\n  // the live preview controls segments/variants exclusively via query params.\n  // If no query params are present, the default (no segment/variant) should\n  // be shown, not whatever the editor's browser cookie happens to contain.\n  const isLivePreview =\n    request.nextUrl.searchParams.get('prepr_hide_bar') === 'true';\n\n  if (!isLivePreview) {\n    // Set Prepr Preview Segment and AB test from cookies\n    const segmentCookie = request.cookies.get('Prepr-Segments')?.value;\n    if (segmentCookie) {\n      response.headers.set('Prepr-Segments', segmentCookie);\n    }\n\n    const abCookie = request.cookies.get('Prepr-ABtesting')?.value;\n    if (abCookie) {\n      response.headers.set('Prepr-ABtesting', abCookie);\n    }\n  }\n\n  // Set Prepr Preview Segment and AB test headers from query params\n  request.nextUrl.searchParams.forEach((value, key) => {\n    if (key === 'prepr_preview_ab') {\n      response.headers.set('Prepr-ABtesting', value);\n      // Don't write live preview selections back into the editor's cookies\n      if (!isLivePreview) {\n        response.cookies.set('Prepr-ABtesting', value);\n      }\n    }\n\n    if (key === 'prepr_preview_segment') {\n      response.headers.set('Prepr-Segments', value);\n      // Don't write live preview selections back into the editor's cookies\n      if (!isLivePreview) {\n        response.cookies.set('Prepr-Segments', value);\n      }\n    }\n  });\n\n  return response;\n}\n"]}