@preprio/prepr-nextjs 2.2.2 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -40
- package/dist/{chunk-34HTRRY5.js → chunk-6DQAX6A7.js} +2 -2
- package/dist/{chunk-34HTRRY5.js.map → chunk-6DQAX6A7.js.map} +1 -1
- package/dist/chunk-JO72DJNR.js +217 -0
- package/dist/chunk-JO72DJNR.js.map +1 -0
- package/dist/chunk-MIMUP7MM.js +217 -0
- package/dist/chunk-MIMUP7MM.js.map +1 -0
- package/dist/chunk-T7HK6EO5.js +2 -0
- package/dist/chunk-T7HK6EO5.js.map +1 -0
- package/dist/chunk-TAKJOK7K.js +2 -0
- package/dist/chunk-TAKJOK7K.js.map +1 -0
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/middleware/index.cjs +1 -1
- package/dist/middleware/index.cjs.map +1 -1
- package/dist/middleware/index.js +1 -1
- package/dist/middleware/index.js.map +1 -1
- package/dist/react/index.cjs +2 -2
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.js +2 -2
- package/dist/react/index.js.map +1 -1
- package/dist/server/index.cjs +1 -1
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +28 -28
package/README.md
CHANGED
|
@@ -669,46 +669,6 @@ import { PreprTrackingPixel } from '@preprio/prepr-nextjs/react'
|
|
|
669
669
|
<PreprTrackingPixel accessToken="your-access-token" />
|
|
670
670
|
```
|
|
671
671
|
|
|
672
|
-
#### `PreprStegaClean`
|
|
673
|
-
A standalone component that automatically cleans stega-encoded text from the DOM. Use this when you need stega cleaning without the full toolbar — for example in a layout that conditionally renders the toolbar but always needs clean text.
|
|
674
|
-
|
|
675
|
-
```typescript
|
|
676
|
-
import { PreprStegaClean } from '@preprio/prepr-nextjs/react'
|
|
677
|
-
|
|
678
|
-
<PreprStegaClean />
|
|
679
|
-
```
|
|
680
|
-
|
|
681
|
-
It renders nothing visible and can be placed anywhere in the React tree. If `PreprToolbarProvider` is already mounted (which includes stega cleaning), placing `PreprStegaClean` additionally is safe — a global deduplication guard ensures only one scanner runs at a time.
|
|
682
|
-
|
|
683
|
-
**Typical use case**: when you render the toolbar only in preview mode but still want stega text cleaned in all preview contexts regardless of toolbar visibility:
|
|
684
|
-
|
|
685
|
-
```typescript
|
|
686
|
-
import { PreprStegaClean, PreprToolbar, PreprToolbarProvider } from '@preprio/prepr-nextjs/react'
|
|
687
|
-
|
|
688
|
-
export default async function RootLayout({ children }: { children: React.ReactNode }) {
|
|
689
|
-
const isPreview = process.env.PREPR_ENV === 'preview'
|
|
690
|
-
const toolbarProps = isPreview ? await getToolbarProps(process.env.PREPR_GRAPHQL_URL!) : null
|
|
691
|
-
|
|
692
|
-
return (
|
|
693
|
-
<html lang="en">
|
|
694
|
-
<body>
|
|
695
|
-
{isPreview && toolbarProps ? (
|
|
696
|
-
<PreprToolbarProvider props={toolbarProps}>
|
|
697
|
-
<PreprToolbar />
|
|
698
|
-
{children}
|
|
699
|
-
</PreprToolbarProvider>
|
|
700
|
-
) : (
|
|
701
|
-
<>
|
|
702
|
-
{isPreview && <PreprStegaClean />}
|
|
703
|
-
{children}
|
|
704
|
-
</>
|
|
705
|
-
)}
|
|
706
|
-
</body>
|
|
707
|
-
</html>
|
|
708
|
-
)
|
|
709
|
-
}
|
|
710
|
-
```
|
|
711
|
-
|
|
712
672
|
## 🔧 Configuration Options
|
|
713
673
|
|
|
714
674
|
### Environment Variables
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {ipAddress}from'@vercel/functions';import {NextResponse}from'next/server';var P="2.2.
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {ipAddress}from'@vercel/functions';import {NextResponse}from'next/server';var P="2.2.1";var b={name:"@preprio/prepr-nextjs",version:P,description:"Next.js package for Prepr CMS preview functionality with advanced debugging and visual editing capabilities",main:"dist/react/index.cjs",types:"./dist/react/index.d.ts",module:"./dist/react/index.js",type:"module",scripts:{build:"tsup",dev:"tsup --watch",clean:"rm -rf dist",check:'tsc --noEmit && eslint src --ext .ts,.tsx && prettier --check "src/**/*.{ts,tsx,js,jsx,json,md}"',fix:'eslint src --ext .ts,.tsx --fix && prettier --write "src/**/*.{ts,tsx,js,jsx,json,md}"',changeset:"changeset",version:"changeset version",release:"pnpm run build && changeset publish",prepublishOnly:"pnpm run check && pnpm run build"},exports:{"./middleware":{import:"./dist/middleware/index.js",types:"./dist/middleware/index.d.ts",require:"./dist/middleware/index.cjs"},"./server":{import:"./dist/server/index.js",types:"./dist/server/index.d.ts",require:"./dist/server/index.cjs"},"./react":{import:"./dist/react/index.js",types:"./dist/react/index.d.ts",require:"./dist/react/index.cjs"},"./utils":{import:"./dist/utils/index.js",types:"./dist/utils/index.d.ts",require:"./dist/utils/index.cjs"},"./types":{import:"./dist/types/index.js",types:"./dist/types/index.d.ts",require:"./dist/types/index.cjs"},"./index.css":{import:"./dist/index.css",require:"./dist/index.css"}},files:["dist","package.json"],keywords:["prepr","cms","nextjs","preview","visual-editing","headless-cms","react","typescript","debug","stega"],author:"Preprio",license:"MIT",packageManager:"pnpm@10.5.2",devDependencies:{"@changesets/cli":"^2.29.5","@eslint/js":"^9.25.1","@types/node":"^20.11.5","@types/react":"19.2.2","@types/react-dom":"19.2.2","@typescript-eslint/eslint-plugin":"^8.31.1","@typescript-eslint/parser":"^8.31.1",autoprefixer:"^10.4.21",cssnano:"^7.0.7",eslint:"^9.25.1","eslint-config-prettier":"^10.1.2","eslint-plugin-prettier":"^5.2.6","eslint-plugin-react":"^7.37.2","eslint-plugin-react-hooks":"^5.0.0",next:"16.0.10",postcss:"^8",prettier:"^3.5.3","prettier-plugin-tailwindcss":"^0.5.12",react:"^19.2.3","react-dom":"^19.2.3",tailwindcss:"^3.4.17",tsup:"^8.5.0",typescript:"^5.8.3"},peerDependencies:{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",react:"^19.0.0 || ^18.0.0 || ^17.0.0 ","react-dom":"^19.0.0 || ^18.0.0 || ^17.0.0"},dependencies:{"@headlessui/react":"^2.2.0","@vercel/functions":"^2.0.0","@vercel/stega":"^0.1.2",clsx:"^2.1.1","postcss-cli":"^11.0.1","tailwind-merge":"^3.0.1",zustand:"^5.0.8"}};function k(r,n,f){var l,m,u,x,g;let e,i;n&&"headers"in n?(e=n,i=f):(e=NextResponse.next(),i=n),r.nextUrl.searchParams.forEach((t,s)=>{switch(s){case "utm_source":e.headers.set("Prepr-Context-utm_source",t);break;case "utm_medium":e.headers.set("Prepr-Context-utm_medium",t);break;case "utm_term":e.headers.set("Prepr-Context-utm_term",t);break;case "utm_content":e.headers.set("Prepr-Context-utm_content",t);break;case "utm_campaign":e.headers.set("Prepr-Context-utm_campaign",t);break}});let o=r.headers.get("referer");o&&e.headers.set("Prepr-Context-initial_referral",o),e.headers.set("Prepr-Package",P);let d=ipAddress(r)||null;r.headers.get("Cf-Connecting-Ip")&&(d=r.headers.get("Cf-Connecting-Ip")),d&&e.headers.set("Prepr-Visitor-IP",d);let c=(l=r.cookies.get("hubspotutk"))==null?void 0:l.value;c&&e.headers.set("Prepr-Hubspot-Id",c);let p=(m=r.cookies.get("__prepr_uid"))==null?void 0:m.value;if(p||(p=crypto.randomUUID(),e.cookies.set("__prepr_uid",p,{maxAge:1*365*24*60}),e.headers.set("Prepr-Customer-Id-Created","true")),e.headers.set("Prepr-Customer-Id",p),!(i!=null&&i.preview)||process.env.PREPR_ENV!=="preview"||!(r.nextUrl.searchParams.has("prepr_preview_segment")||r.nextUrl.searchParams.has("prepr_preview_ab"))&&!(((u=r.cookies.get("Prepr-Preview-Mode"))==null?void 0:u.value)!=="false"))return e;e.headers.set("Prepr-Preview-Bar","true");let a=r.nextUrl.searchParams.get("prepr_hide_bar")==="true";if(!a){let t=(x=r.cookies.get("Prepr-Segments"))==null?void 0:x.value;t&&e.headers.set("Prepr-Segments",t);let s=(g=r.cookies.get("Prepr-ABtesting"))==null?void 0:g.value;s&&e.headers.set("Prepr-ABtesting",s);}return r.nextUrl.searchParams.forEach((t,s)=>{s==="prepr_preview_ab"&&(e.headers.set("Prepr-ABtesting",t),a||e.cookies.set("Prepr-ABtesting",t)),s==="prepr_preview_segment"&&(e.headers.set("Prepr-Segments",t),a||e.cookies.set("Prepr-Segments",t));}),e}export{b as a,k as b};//# sourceMappingURL=chunk-6DQAX6A7.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-6DQAX6A7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/middleware/index.ts"],"names":["version","package_default","createPreprMiddleware","request","responseOrOptions","options","_a","_b","_c","_d","_e","response","finalOptions","NextResponse","value","key","referrer","ip","ipAddress","hutkCookie","cookie","isLivePreview","segmentCookie","abCookie"],"mappings":"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","file":"chunk-34HTRRY5.js","sourcesContent":["{\n \"name\": \"@preprio/prepr-nextjs\",\n \"version\": \"2.2.2\",\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.29.5\",\n \"@eslint/js\": \"^9.25.1\",\n \"@types/node\": \"^20.11.5\",\n \"@types/react\": \"19.2.2\",\n \"@types/react-dom\": \"19.2.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.31.1\",\n \"@typescript-eslint/parser\": \"^8.31.1\",\n \"autoprefixer\": \"^10.4.21\",\n \"cssnano\": \"^7.0.7\",\n \"eslint\": \"^9.25.1\",\n \"eslint-config-prettier\": \"^10.1.2\",\n \"eslint-plugin-prettier\": \"^5.2.6\",\n \"eslint-plugin-react\": \"^7.37.2\",\n \"eslint-plugin-react-hooks\": \"^5.0.0\",\n \"next\": \"16.0.10\",\n \"postcss\": \"^8\",\n \"prettier\": \"^3.5.3\",\n \"prettier-plugin-tailwindcss\": \"^0.5.12\",\n \"react\": \"^19.2.3\",\n \"react-dom\": \"^19.2.3\",\n \"tailwindcss\": \"^3.4.17\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.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 \"dependencies\": {\n \"@headlessui/react\": \"^2.2.0\",\n \"@vercel/functions\": \"^2.0.0\",\n \"@vercel/stega\": \"^0.1.2\",\n \"clsx\": \"^2.1.1\",\n \"postcss-cli\": \"^11.0.1\",\n \"tailwind-merge\": \"^3.0.1\",\n \"zustand\": \"^5.0.8\"\n }\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 // 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"]}
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/middleware/index.ts"],"names":["version","package_default","createPreprMiddleware","request","responseOrOptions","options","_a","_b","_c","_d","_e","response","finalOptions","NextResponse","value","key","referrer","ip","ipAddress","hutkCookie","cookie","isLivePreview","segmentCookie","abCookie"],"mappings":"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","file":"chunk-6DQAX6A7.js","sourcesContent":["{\n \"name\": \"@preprio/prepr-nextjs\",\n \"version\": \"2.2.1\",\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.29.5\",\n \"@eslint/js\": \"^9.25.1\",\n \"@types/node\": \"^20.11.5\",\n \"@types/react\": \"19.2.2\",\n \"@types/react-dom\": \"19.2.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.31.1\",\n \"@typescript-eslint/parser\": \"^8.31.1\",\n \"autoprefixer\": \"^10.4.21\",\n \"cssnano\": \"^7.0.7\",\n \"eslint\": \"^9.25.1\",\n \"eslint-config-prettier\": \"^10.1.2\",\n \"eslint-plugin-prettier\": \"^5.2.6\",\n \"eslint-plugin-react\": \"^7.37.2\",\n \"eslint-plugin-react-hooks\": \"^5.0.0\",\n \"next\": \"16.0.10\",\n \"postcss\": \"^8\",\n \"prettier\": \"^3.5.3\",\n \"prettier-plugin-tailwindcss\": \"^0.5.12\",\n \"react\": \"^19.2.3\",\n \"react-dom\": \"^19.2.3\",\n \"tailwindcss\": \"^3.4.17\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.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 \"dependencies\": {\n \"@headlessui/react\": \"^2.2.0\",\n \"@vercel/functions\": \"^2.0.0\",\n \"@vercel/stega\": \"^0.1.2\",\n \"clsx\": \"^2.1.1\",\n \"postcss-cli\": \"^11.0.1\",\n \"tailwind-merge\": \"^3.0.1\",\n \"zustand\": \"^5.0.8\"\n }\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 // 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"]}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { ipAddress } from '@vercel/functions';
|
|
2
|
+
import { NextResponse } from 'next/server';
|
|
3
|
+
|
|
4
|
+
// src/middleware/index.ts
|
|
5
|
+
|
|
6
|
+
// package.json
|
|
7
|
+
var version = "2.2.2";
|
|
8
|
+
var package_default = {
|
|
9
|
+
name: "@preprio/prepr-nextjs",
|
|
10
|
+
version,
|
|
11
|
+
description: "Next.js package for Prepr CMS preview functionality with advanced debugging and visual editing capabilities",
|
|
12
|
+
main: "dist/react/index.cjs",
|
|
13
|
+
types: "./dist/react/index.d.ts",
|
|
14
|
+
module: "./dist/react/index.js",
|
|
15
|
+
type: "module",
|
|
16
|
+
scripts: {
|
|
17
|
+
build: "tsup",
|
|
18
|
+
dev: "tsup --watch",
|
|
19
|
+
clean: "rm -rf dist",
|
|
20
|
+
check: 'tsc --noEmit && eslint src --ext .ts,.tsx && prettier --check "src/**/*.{ts,tsx,js,jsx,json,md}"',
|
|
21
|
+
fix: 'eslint src --ext .ts,.tsx --fix && prettier --write "src/**/*.{ts,tsx,js,jsx,json,md}"',
|
|
22
|
+
changeset: "changeset",
|
|
23
|
+
version: "changeset version",
|
|
24
|
+
release: "pnpm run build && changeset publish",
|
|
25
|
+
prepublishOnly: "pnpm run check && pnpm run build"
|
|
26
|
+
},
|
|
27
|
+
exports: {
|
|
28
|
+
"./middleware": {
|
|
29
|
+
import: "./dist/middleware/index.js",
|
|
30
|
+
types: "./dist/middleware/index.d.ts",
|
|
31
|
+
require: "./dist/middleware/index.cjs"
|
|
32
|
+
},
|
|
33
|
+
"./server": {
|
|
34
|
+
import: "./dist/server/index.js",
|
|
35
|
+
types: "./dist/server/index.d.ts",
|
|
36
|
+
require: "./dist/server/index.cjs"
|
|
37
|
+
},
|
|
38
|
+
"./react": {
|
|
39
|
+
import: "./dist/react/index.js",
|
|
40
|
+
types: "./dist/react/index.d.ts",
|
|
41
|
+
require: "./dist/react/index.cjs"
|
|
42
|
+
},
|
|
43
|
+
"./utils": {
|
|
44
|
+
import: "./dist/utils/index.js",
|
|
45
|
+
types: "./dist/utils/index.d.ts",
|
|
46
|
+
require: "./dist/utils/index.cjs"
|
|
47
|
+
},
|
|
48
|
+
"./types": {
|
|
49
|
+
import: "./dist/types/index.js",
|
|
50
|
+
types: "./dist/types/index.d.ts",
|
|
51
|
+
require: "./dist/types/index.cjs"
|
|
52
|
+
},
|
|
53
|
+
"./index.css": {
|
|
54
|
+
import: "./dist/index.css",
|
|
55
|
+
require: "./dist/index.css"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
files: [
|
|
59
|
+
"dist",
|
|
60
|
+
"package.json"
|
|
61
|
+
],
|
|
62
|
+
keywords: [
|
|
63
|
+
"prepr",
|
|
64
|
+
"cms",
|
|
65
|
+
"nextjs",
|
|
66
|
+
"preview",
|
|
67
|
+
"visual-editing",
|
|
68
|
+
"headless-cms",
|
|
69
|
+
"react",
|
|
70
|
+
"typescript",
|
|
71
|
+
"debug",
|
|
72
|
+
"stega"
|
|
73
|
+
],
|
|
74
|
+
author: "Preprio",
|
|
75
|
+
license: "MIT",
|
|
76
|
+
packageManager: "pnpm@10.5.2",
|
|
77
|
+
devDependencies: {
|
|
78
|
+
"@changesets/cli": "^2.29.5",
|
|
79
|
+
"@eslint/js": "^9.25.1",
|
|
80
|
+
"@types/node": "^20.11.5",
|
|
81
|
+
"@types/react": "19.2.2",
|
|
82
|
+
"@types/react-dom": "19.2.2",
|
|
83
|
+
"@typescript-eslint/eslint-plugin": "^8.31.1",
|
|
84
|
+
"@typescript-eslint/parser": "^8.31.1",
|
|
85
|
+
autoprefixer: "^10.4.21",
|
|
86
|
+
cssnano: "^7.0.7",
|
|
87
|
+
eslint: "^9.25.1",
|
|
88
|
+
"eslint-config-prettier": "^10.1.2",
|
|
89
|
+
"eslint-plugin-prettier": "^5.2.6",
|
|
90
|
+
"eslint-plugin-react": "^7.37.2",
|
|
91
|
+
"eslint-plugin-react-hooks": "^5.0.0",
|
|
92
|
+
next: "16.0.10",
|
|
93
|
+
postcss: "^8",
|
|
94
|
+
prettier: "^3.5.3",
|
|
95
|
+
"prettier-plugin-tailwindcss": "^0.5.12",
|
|
96
|
+
react: "^19.2.3",
|
|
97
|
+
"react-dom": "^19.2.3",
|
|
98
|
+
tailwindcss: "^3.4.17",
|
|
99
|
+
tsup: "^8.5.0",
|
|
100
|
+
typescript: "^5.8.3"
|
|
101
|
+
},
|
|
102
|
+
peerDependencies: {
|
|
103
|
+
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",
|
|
104
|
+
react: "^19.0.0 || ^18.0.0 || ^17.0.0 ",
|
|
105
|
+
"react-dom": "^19.0.0 || ^18.0.0 || ^17.0.0"
|
|
106
|
+
},
|
|
107
|
+
dependencies: {
|
|
108
|
+
"@headlessui/react": "^2.2.0",
|
|
109
|
+
"@vercel/functions": "^2.0.0",
|
|
110
|
+
"@vercel/stega": "^0.1.2",
|
|
111
|
+
clsx: "^2.1.1",
|
|
112
|
+
"postcss-cli": "^11.0.1",
|
|
113
|
+
"tailwind-merge": "^3.0.1",
|
|
114
|
+
zustand: "^5.0.8"
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// src/middleware/index.ts
|
|
119
|
+
function createPreprMiddleware(request, responseOrOptions, options) {
|
|
120
|
+
var _a, _b, _c, _d, _e;
|
|
121
|
+
let response;
|
|
122
|
+
let finalOptions;
|
|
123
|
+
if (responseOrOptions && "headers" in responseOrOptions) {
|
|
124
|
+
response = responseOrOptions;
|
|
125
|
+
finalOptions = options;
|
|
126
|
+
} else {
|
|
127
|
+
response = NextResponse.next();
|
|
128
|
+
finalOptions = responseOrOptions;
|
|
129
|
+
}
|
|
130
|
+
request.nextUrl.searchParams.forEach((value, key) => {
|
|
131
|
+
switch (key) {
|
|
132
|
+
case "utm_source":
|
|
133
|
+
response.headers.set("Prepr-Context-utm_source", value);
|
|
134
|
+
break;
|
|
135
|
+
case "utm_medium":
|
|
136
|
+
response.headers.set("Prepr-Context-utm_medium", value);
|
|
137
|
+
break;
|
|
138
|
+
case "utm_term":
|
|
139
|
+
response.headers.set("Prepr-Context-utm_term", value);
|
|
140
|
+
break;
|
|
141
|
+
case "utm_content":
|
|
142
|
+
response.headers.set("Prepr-Context-utm_content", value);
|
|
143
|
+
break;
|
|
144
|
+
case "utm_campaign":
|
|
145
|
+
response.headers.set("Prepr-Context-utm_campaign", value);
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
const referrer = request.headers.get("referer");
|
|
150
|
+
if (referrer) {
|
|
151
|
+
response.headers.set("Prepr-Context-initial_referral", referrer);
|
|
152
|
+
}
|
|
153
|
+
response.headers.set("Prepr-Package", version);
|
|
154
|
+
let ip = ipAddress(request) || null;
|
|
155
|
+
if (request.headers.get("Cf-Connecting-Ip")) {
|
|
156
|
+
ip = request.headers.get("Cf-Connecting-Ip");
|
|
157
|
+
}
|
|
158
|
+
if (ip) {
|
|
159
|
+
response.headers.set("Prepr-Visitor-IP", ip);
|
|
160
|
+
}
|
|
161
|
+
const hutkCookie = (_a = request.cookies.get("hubspotutk")) == null ? void 0 : _a.value;
|
|
162
|
+
if (hutkCookie) {
|
|
163
|
+
response.headers.set("Prepr-Hubspot-Id", hutkCookie);
|
|
164
|
+
}
|
|
165
|
+
let cookie = (_b = request.cookies.get("__prepr_uid")) == null ? void 0 : _b.value;
|
|
166
|
+
if (!cookie) {
|
|
167
|
+
cookie = crypto.randomUUID();
|
|
168
|
+
response.cookies.set("__prepr_uid", cookie, {
|
|
169
|
+
maxAge: 1 * 365 * 24 * 60
|
|
170
|
+
// Set for one year
|
|
171
|
+
});
|
|
172
|
+
response.headers.set("Prepr-Customer-Id-Created", "true");
|
|
173
|
+
}
|
|
174
|
+
response.headers.set("Prepr-Customer-Id", cookie);
|
|
175
|
+
if (!(finalOptions == null ? void 0 : finalOptions.preview) || process.env.PREPR_ENV !== "preview") {
|
|
176
|
+
return response;
|
|
177
|
+
}
|
|
178
|
+
const hasPreviewParams = request.nextUrl.searchParams.has("prepr_preview_segment") || request.nextUrl.searchParams.has("prepr_preview_ab");
|
|
179
|
+
if (!hasPreviewParams) {
|
|
180
|
+
const previewModeCookie = (_c = request.cookies.get("Prepr-Preview-Mode")) == null ? void 0 : _c.value;
|
|
181
|
+
const previewModeEnabled = previewModeCookie !== "false";
|
|
182
|
+
if (!previewModeEnabled) {
|
|
183
|
+
return response;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
response.headers.set("Prepr-Preview-Bar", "true");
|
|
187
|
+
const isLivePreview = request.nextUrl.searchParams.get("prepr_hide_bar") === "true";
|
|
188
|
+
if (!isLivePreview) {
|
|
189
|
+
const segmentCookie = (_d = request.cookies.get("Prepr-Segments")) == null ? void 0 : _d.value;
|
|
190
|
+
if (segmentCookie) {
|
|
191
|
+
response.headers.set("Prepr-Segments", segmentCookie);
|
|
192
|
+
}
|
|
193
|
+
const abCookie = (_e = request.cookies.get("Prepr-ABtesting")) == null ? void 0 : _e.value;
|
|
194
|
+
if (abCookie) {
|
|
195
|
+
response.headers.set("Prepr-ABtesting", abCookie);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
request.nextUrl.searchParams.forEach((value, key) => {
|
|
199
|
+
if (key === "prepr_preview_ab") {
|
|
200
|
+
response.headers.set("Prepr-ABtesting", value);
|
|
201
|
+
if (!isLivePreview) {
|
|
202
|
+
response.cookies.set("Prepr-ABtesting", value);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (key === "prepr_preview_segment") {
|
|
206
|
+
response.headers.set("Prepr-Segments", value);
|
|
207
|
+
if (!isLivePreview) {
|
|
208
|
+
response.cookies.set("Prepr-Segments", value);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
return response;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export { createPreprMiddleware, package_default };
|
|
216
|
+
//# sourceMappingURL=chunk-JO72DJNR.js.map
|
|
217
|
+
//# sourceMappingURL=chunk-JO72DJNR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/middleware/index.ts"],"names":[],"mappings":"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","file":"chunk-JO72DJNR.js","sourcesContent":["{\n \"name\": \"@preprio/prepr-nextjs\",\n \"version\": \"2.2.2\",\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.29.5\",\n \"@eslint/js\": \"^9.25.1\",\n \"@types/node\": \"^20.11.5\",\n \"@types/react\": \"19.2.2\",\n \"@types/react-dom\": \"19.2.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.31.1\",\n \"@typescript-eslint/parser\": \"^8.31.1\",\n \"autoprefixer\": \"^10.4.21\",\n \"cssnano\": \"^7.0.7\",\n \"eslint\": \"^9.25.1\",\n \"eslint-config-prettier\": \"^10.1.2\",\n \"eslint-plugin-prettier\": \"^5.2.6\",\n \"eslint-plugin-react\": \"^7.37.2\",\n \"eslint-plugin-react-hooks\": \"^5.0.0\",\n \"next\": \"16.0.10\",\n \"postcss\": \"^8\",\n \"prettier\": \"^3.5.3\",\n \"prettier-plugin-tailwindcss\": \"^0.5.12\",\n \"react\": \"^19.2.3\",\n \"react-dom\": \"^19.2.3\",\n \"tailwindcss\": \"^3.4.17\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.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 \"dependencies\": {\n \"@headlessui/react\": \"^2.2.0\",\n \"@vercel/functions\": \"^2.0.0\",\n \"@vercel/stega\": \"^0.1.2\",\n \"clsx\": \"^2.1.1\",\n \"postcss-cli\": \"^11.0.1\",\n \"tailwind-merge\": \"^3.0.1\",\n \"zustand\": \"^5.0.8\"\n }\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 // 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"]}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { ipAddress } from '@vercel/functions';
|
|
2
|
+
import { NextResponse } from 'next/server';
|
|
3
|
+
|
|
4
|
+
// src/middleware/index.ts
|
|
5
|
+
|
|
6
|
+
// package.json
|
|
7
|
+
var version = "2.2.2";
|
|
8
|
+
var package_default = {
|
|
9
|
+
name: "@preprio/prepr-nextjs",
|
|
10
|
+
version,
|
|
11
|
+
description: "Next.js package for Prepr CMS preview functionality with advanced debugging and visual editing capabilities",
|
|
12
|
+
main: "dist/react/index.cjs",
|
|
13
|
+
types: "./dist/react/index.d.ts",
|
|
14
|
+
module: "./dist/react/index.js",
|
|
15
|
+
type: "module",
|
|
16
|
+
scripts: {
|
|
17
|
+
build: "tsup",
|
|
18
|
+
dev: "tsup --watch",
|
|
19
|
+
clean: "rm -rf dist",
|
|
20
|
+
check: 'tsc --noEmit && eslint src --ext .ts,.tsx && prettier --check "src/**/*.{ts,tsx,js,jsx,json,md}"',
|
|
21
|
+
fix: 'eslint src --ext .ts,.tsx --fix && prettier --write "src/**/*.{ts,tsx,js,jsx,json,md}"',
|
|
22
|
+
changeset: "changeset",
|
|
23
|
+
version: "changeset version",
|
|
24
|
+
release: "pnpm run build && changeset publish",
|
|
25
|
+
prepublishOnly: "pnpm run check && pnpm run build"
|
|
26
|
+
},
|
|
27
|
+
exports: {
|
|
28
|
+
"./middleware": {
|
|
29
|
+
import: "./dist/middleware/index.js",
|
|
30
|
+
types: "./dist/middleware/index.d.ts",
|
|
31
|
+
require: "./dist/middleware/index.cjs"
|
|
32
|
+
},
|
|
33
|
+
"./server": {
|
|
34
|
+
import: "./dist/server/index.js",
|
|
35
|
+
types: "./dist/server/index.d.ts",
|
|
36
|
+
require: "./dist/server/index.cjs"
|
|
37
|
+
},
|
|
38
|
+
"./react": {
|
|
39
|
+
import: "./dist/react/index.js",
|
|
40
|
+
types: "./dist/react/index.d.ts",
|
|
41
|
+
require: "./dist/react/index.cjs"
|
|
42
|
+
},
|
|
43
|
+
"./utils": {
|
|
44
|
+
import: "./dist/utils/index.js",
|
|
45
|
+
types: "./dist/utils/index.d.ts",
|
|
46
|
+
require: "./dist/utils/index.cjs"
|
|
47
|
+
},
|
|
48
|
+
"./types": {
|
|
49
|
+
import: "./dist/types/index.js",
|
|
50
|
+
types: "./dist/types/index.d.ts",
|
|
51
|
+
require: "./dist/types/index.cjs"
|
|
52
|
+
},
|
|
53
|
+
"./index.css": {
|
|
54
|
+
import: "./dist/index.css",
|
|
55
|
+
require: "./dist/index.css"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
files: [
|
|
59
|
+
"dist",
|
|
60
|
+
"package.json"
|
|
61
|
+
],
|
|
62
|
+
keywords: [
|
|
63
|
+
"prepr",
|
|
64
|
+
"cms",
|
|
65
|
+
"nextjs",
|
|
66
|
+
"preview",
|
|
67
|
+
"visual-editing",
|
|
68
|
+
"headless-cms",
|
|
69
|
+
"react",
|
|
70
|
+
"typescript",
|
|
71
|
+
"debug",
|
|
72
|
+
"stega"
|
|
73
|
+
],
|
|
74
|
+
author: "Preprio",
|
|
75
|
+
license: "MIT",
|
|
76
|
+
packageManager: "pnpm@10.5.2",
|
|
77
|
+
devDependencies: {
|
|
78
|
+
"@changesets/cli": "^2.30.0",
|
|
79
|
+
"@eslint/js": "^9.39.2",
|
|
80
|
+
"@types/node": "^25.4.0",
|
|
81
|
+
"@types/react": "19.2.14",
|
|
82
|
+
"@types/react-dom": "19.2.3",
|
|
83
|
+
"@typescript-eslint/eslint-plugin": "^8.57.0",
|
|
84
|
+
"@typescript-eslint/parser": "^8.57.0",
|
|
85
|
+
autoprefixer: "^10.4.27",
|
|
86
|
+
cssnano: "^7.1.3",
|
|
87
|
+
eslint: "^9.39.2",
|
|
88
|
+
"eslint-config-prettier": "^10.1.8",
|
|
89
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
90
|
+
"eslint-plugin-react": "^7.37.5",
|
|
91
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
92
|
+
next: "16.1.6",
|
|
93
|
+
postcss: "^8.5.8",
|
|
94
|
+
prettier: "^3.8.1",
|
|
95
|
+
"prettier-plugin-tailwindcss": "^0.7.2",
|
|
96
|
+
react: "^19.2.4",
|
|
97
|
+
"react-dom": "^19.2.4",
|
|
98
|
+
tailwindcss: "^3.4.17",
|
|
99
|
+
tsup: "^8.5.1",
|
|
100
|
+
typescript: "^5.9.3"
|
|
101
|
+
},
|
|
102
|
+
peerDependencies: {
|
|
103
|
+
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",
|
|
104
|
+
react: "^19.0.0 || ^18.0.0 || ^17.0.0 ",
|
|
105
|
+
"react-dom": "^19.0.0 || ^18.0.0 || ^17.0.0"
|
|
106
|
+
},
|
|
107
|
+
dependencies: {
|
|
108
|
+
"@headlessui/react": "^2.2.9",
|
|
109
|
+
"@vercel/functions": "^3.4.3",
|
|
110
|
+
"@vercel/stega": "^1.0.0",
|
|
111
|
+
clsx: "^2.1.1",
|
|
112
|
+
"postcss-cli": "^11.0.1",
|
|
113
|
+
"tailwind-merge": "^3.5.0",
|
|
114
|
+
zustand: "^5.0.11"
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// src/middleware/index.ts
|
|
119
|
+
function createPreprMiddleware(request, responseOrOptions, options) {
|
|
120
|
+
var _a, _b, _c, _d, _e;
|
|
121
|
+
let response;
|
|
122
|
+
let finalOptions;
|
|
123
|
+
if (responseOrOptions && "headers" in responseOrOptions) {
|
|
124
|
+
response = responseOrOptions;
|
|
125
|
+
finalOptions = options;
|
|
126
|
+
} else {
|
|
127
|
+
response = NextResponse.next();
|
|
128
|
+
finalOptions = responseOrOptions;
|
|
129
|
+
}
|
|
130
|
+
request.nextUrl.searchParams.forEach((value, key) => {
|
|
131
|
+
switch (key) {
|
|
132
|
+
case "utm_source":
|
|
133
|
+
response.headers.set("Prepr-Context-utm_source", value);
|
|
134
|
+
break;
|
|
135
|
+
case "utm_medium":
|
|
136
|
+
response.headers.set("Prepr-Context-utm_medium", value);
|
|
137
|
+
break;
|
|
138
|
+
case "utm_term":
|
|
139
|
+
response.headers.set("Prepr-Context-utm_term", value);
|
|
140
|
+
break;
|
|
141
|
+
case "utm_content":
|
|
142
|
+
response.headers.set("Prepr-Context-utm_content", value);
|
|
143
|
+
break;
|
|
144
|
+
case "utm_campaign":
|
|
145
|
+
response.headers.set("Prepr-Context-utm_campaign", value);
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
const referrer = request.headers.get("referer");
|
|
150
|
+
if (referrer) {
|
|
151
|
+
response.headers.set("Prepr-Context-initial_referral", referrer);
|
|
152
|
+
}
|
|
153
|
+
response.headers.set("Prepr-Package", version);
|
|
154
|
+
let ip = ipAddress(request) || null;
|
|
155
|
+
if (request.headers.get("Cf-Connecting-Ip")) {
|
|
156
|
+
ip = request.headers.get("Cf-Connecting-Ip");
|
|
157
|
+
}
|
|
158
|
+
if (ip) {
|
|
159
|
+
response.headers.set("Prepr-Visitor-IP", ip);
|
|
160
|
+
}
|
|
161
|
+
const hutkCookie = (_a = request.cookies.get("hubspotutk")) == null ? void 0 : _a.value;
|
|
162
|
+
if (hutkCookie) {
|
|
163
|
+
response.headers.set("Prepr-Hubspot-Id", hutkCookie);
|
|
164
|
+
}
|
|
165
|
+
let cookie = (_b = request.cookies.get("__prepr_uid")) == null ? void 0 : _b.value;
|
|
166
|
+
if (!cookie) {
|
|
167
|
+
cookie = crypto.randomUUID();
|
|
168
|
+
response.cookies.set("__prepr_uid", cookie, {
|
|
169
|
+
maxAge: 1 * 365 * 24 * 60
|
|
170
|
+
// Set for one year
|
|
171
|
+
});
|
|
172
|
+
response.headers.set("Prepr-Customer-Id-Created", "true");
|
|
173
|
+
}
|
|
174
|
+
response.headers.set("Prepr-Customer-Id", cookie);
|
|
175
|
+
if (!(finalOptions == null ? void 0 : finalOptions.preview) || process.env.PREPR_ENV !== "preview") {
|
|
176
|
+
return response;
|
|
177
|
+
}
|
|
178
|
+
const hasPreviewParams = request.nextUrl.searchParams.has("prepr_preview_segment") || request.nextUrl.searchParams.has("prepr_preview_ab");
|
|
179
|
+
if (!hasPreviewParams) {
|
|
180
|
+
const previewModeCookie = (_c = request.cookies.get("Prepr-Preview-Mode")) == null ? void 0 : _c.value;
|
|
181
|
+
const previewModeEnabled = previewModeCookie !== "false";
|
|
182
|
+
if (!previewModeEnabled) {
|
|
183
|
+
return response;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
response.headers.set("Prepr-Preview-Bar", "true");
|
|
187
|
+
const isLivePreview = request.nextUrl.searchParams.get("prepr_hide_bar") === "true";
|
|
188
|
+
if (!isLivePreview) {
|
|
189
|
+
const segmentCookie = (_d = request.cookies.get("Prepr-Segments")) == null ? void 0 : _d.value;
|
|
190
|
+
if (segmentCookie) {
|
|
191
|
+
response.headers.set("Prepr-Segments", segmentCookie);
|
|
192
|
+
}
|
|
193
|
+
const abCookie = (_e = request.cookies.get("Prepr-ABtesting")) == null ? void 0 : _e.value;
|
|
194
|
+
if (abCookie) {
|
|
195
|
+
response.headers.set("Prepr-ABtesting", abCookie);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
request.nextUrl.searchParams.forEach((value, key) => {
|
|
199
|
+
if (key === "prepr_preview_ab") {
|
|
200
|
+
response.headers.set("Prepr-ABtesting", value);
|
|
201
|
+
if (!isLivePreview) {
|
|
202
|
+
response.cookies.set("Prepr-ABtesting", value);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (key === "prepr_preview_segment") {
|
|
206
|
+
response.headers.set("Prepr-Segments", value);
|
|
207
|
+
if (!isLivePreview) {
|
|
208
|
+
response.cookies.set("Prepr-Segments", value);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
return response;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export { createPreprMiddleware, package_default };
|
|
216
|
+
//# sourceMappingURL=chunk-MIMUP7MM.js.map
|
|
217
|
+
//# sourceMappingURL=chunk-MIMUP7MM.js.map
|