{"version":3,"sources":["../../package.json","../../src/middleware/index.ts","../../src/server/index.ts"],"names":["version","package_default","createPreprMiddleware","request","responseOrOptions","options","_a","_b","_c","_d","_e","response","finalOptions","NextResponse","value","key","referrer","userAgent","ip","ipAddress","hutkCookie","cookie","isLivePreview","segmentCookie","abCookie","PreprError","message","code","context","originalError","getPreprHeader","name","__async","headers","getPreprUUID","getActiveSegment","getActiveVariant","getPreprHeaders","preprHeaders","validatePreprToken","token","isPreviewMode","extractAccessToken","graphqlUrl","url","pathParts","e","getPreprEnvironmentSegments","validation","getPackageVersion","json","error","getToolbarProps","data","activeSegment","activeVariant"],"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","import { headers } from 'next/headers';\nimport {\n  PreprToolbarProps,\n  PreprSegment,\n  PreprHeaderName,\n  PreprErrorCode,\n} from '../types';\nimport pjson from '../../package.json';\nimport createPreprMiddleware from '../middleware';\n\n/**\n * Custom error class for Prepr-related errors\n */\nexport class PreprError extends Error {\n  constructor(\n    message: string,\n    public readonly code: PreprErrorCode,\n    public readonly context?: string,\n    public readonly originalError?: Error\n  ) {\n    super(message);\n    this.name = 'PreprError';\n  }\n}\n\n/**\n * Internal helper to get a specific Prepr header value\n * @param name - The header name to retrieve\n * @returns The header value or null if not found\n */\nasync function getPreprHeader(name: PreprHeaderName): Promise<string | null> {\n  const headersList = await headers();\n  return headersList.get(name);\n}\n\n/**\n * Returns the Prepr Customer ID from the headers\n * @returns Prepr Customer ID\n */\nexport async function getPreprUUID(): Promise<string | null> {\n  return getPreprHeader('prepr-customer-id');\n}\n\n/**\n * Returns the active segment from the headers\n * @returns Active segment\n */\nexport async function getActiveSegment(): Promise<string | null> {\n  return getPreprHeader('Prepr-Segments');\n}\n\n/**\n * Returns the active variant from the headers\n * @returns Active variant\n */\nexport async function getActiveVariant(): Promise<string | null> {\n  return getPreprHeader('Prepr-ABtesting');\n}\n\n/**\n * Helper function to retrieve all Prepr headers\n * @returns Object with Prepr headers\n */\nexport async function getPreprHeaders(): Promise<Record<string, string>> {\n  const preprHeaders: Record<string, string> = {};\n  const headersList = await headers();\n\n  headersList.forEach((value, key) => {\n    if (key.startsWith('prepr') || key.startsWith('Prepr')) {\n      if (key === 'prepr-user-agent') {\n        preprHeaders['User-Agent'] = value;\n      } else {\n        preprHeaders[key] = value;\n      }\n    }\n  });\n\n  return preprHeaders;\n}\n\n/**\n * Validates a Prepr GraphQL token\n * @param token - The token to validate\n * @returns Validation result with error details if invalid\n */\nexport function validatePreprToken(token: string): {\n  valid: boolean;\n  error?: string;\n} {\n  if (!token) {\n    return { valid: false, error: 'Token is required' };\n  }\n  if (!token.startsWith('https://')) {\n    return { valid: false, error: 'Token must be a valid HTTPS URL' };\n  }\n  return { valid: true };\n}\n\n/**\n * Checks if the current environment is in preview mode\n * @returns True if in preview mode\n */\nexport function isPreviewMode(): boolean {\n  return process.env.PREPR_ENV === 'preview';\n}\n\n/**\n * Extracts the access token from a Prepr GraphQL URL\n * @param graphqlUrl - The full Prepr GraphQL URL\n * @returns The access token or null if invalid\n * @example\n * ```typescript\n * const token = extractAccessToken('https://graphql.prepr.io/abc123')\n * // Returns: 'abc123'\n * ```\n */\nexport function extractAccessToken(graphqlUrl: string): string | null {\n  if (!graphqlUrl) return null;\n\n  try {\n    const url = new URL(graphqlUrl);\n    if (url.hostname !== 'graphql.prepr.io') return null;\n\n    const pathParts = url.pathname.split('/');\n    const token = pathParts[pathParts.length - 1];\n\n    return token && token.length > 0 ? token : null;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Fetches the segments from the Prepr API\n * @param token Prepr GraphQL URL with scope 'segments'\n * @returns Array of PreprSegment\n * @throws PreprError if the request fails\n */\nexport async function getPreprEnvironmentSegments(\n  token: string\n): Promise<PreprSegment[]> {\n  const validation = validatePreprToken(token);\n  if (!validation.valid) {\n    throw new PreprError(\n      validation.error!,\n      'INVALID_TOKEN',\n      'getPreprEnvironmentSegments'\n    );\n  }\n\n  try {\n    const response = await fetch(token, {\n      headers: {\n        'User-Agent': `Prepr-Preview-Bar/${getPackageVersion()}`,\n        'Content-Type': 'application/json',\n      },\n      method: 'POST',\n      body: JSON.stringify({\n        query: `{\n                _Segments {\n                    _id\n                    name\n                }\n            }`,\n      }),\n    });\n\n    if (!response.ok) {\n      throw new PreprError(\n        `HTTP ${response.status}: ${response.statusText}`,\n        'HTTP_ERROR',\n        'getPreprEnvironmentSegments'\n      );\n    }\n\n    const json = await response.json();\n\n    if (!json || !json.data || !json.data._Segments) {\n      throw new PreprError(\n        'Invalid response format from Prepr API',\n        'INVALID_RESPONSE',\n        'getPreprEnvironmentSegments'\n      );\n    }\n\n    return json.data._Segments as PreprSegment[];\n  } catch (error) {\n    if (error instanceof PreprError) {\n      throw error;\n    }\n    throw new PreprError(\n      'Failed to fetch segments from Prepr API',\n      'FETCH_ERROR',\n      'getPreprEnvironmentSegments',\n      error instanceof Error ? error : new Error(String(error))\n    );\n  }\n}\n\n/**\n * Fetches all the necessary previewbar props\n * @param token Prepr GraphQL URL with scope 'segments'\n * @returns Object with activeSegment, activeVariant and data\n */\nexport async function getToolbarProps(\n  token: string\n): Promise<PreprToolbarProps> {\n  let data: PreprSegment[] = [];\n  let activeSegment: string | null = null;\n  let activeVariant: string | null = null;\n\n  // Prevent unnecessary function calling in production\n  if (isPreviewMode()) {\n    try {\n      data = await getPreprEnvironmentSegments(token);\n      activeSegment = await getActiveSegment();\n      activeVariant = await getActiveVariant();\n    } catch (error) {\n      // In preview mode, we should still return props even if API fails\n      console.error('Failed to fetch toolbar props:', error);\n      // Return empty data to prevent toolbar from crashing\n      data = [];\n    }\n  }\n\n  return {\n    activeSegment,\n    activeVariant,\n    data,\n  };\n}\n\nfunction getPackageVersion() {\n  return pjson.version;\n}\n\nexport { createPreprMiddleware };\n"]}