Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f39ec3d35 |
@@ -118,8 +118,8 @@ export default async function RootLayout({
|
|||||||
const { headers } = await import("next/headers");
|
const { headers } = await import("next/headers");
|
||||||
const requestHeaders = await headers();
|
const requestHeaders = await headers();
|
||||||
|
|
||||||
if ("setServerContext" in serverServices.analytics) {
|
if (serverServices.analytics.setServerContext) {
|
||||||
(serverServices.analytics as any).setServerContext({
|
serverServices.analytics.setServerContext({
|
||||||
userAgent: requestHeaders.get("user-agent") || undefined,
|
userAgent: requestHeaders.get("user-agent") || undefined,
|
||||||
language:
|
language:
|
||||||
requestHeaders.get("accept-language")?.split(",")[0] || undefined,
|
requestHeaders.get("accept-language")?.split(",")[0] || undefined,
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ export async function POST(req: Request) {
|
|||||||
|
|
||||||
// Set analytics context from request headers for high-fidelity server-side tracking
|
// Set analytics context from request headers for high-fidelity server-side tracking
|
||||||
// This fulfills the "server-side via nextjs proxy" requirement
|
// This fulfills the "server-side via nextjs proxy" requirement
|
||||||
if ("setServerContext" in services.analytics) {
|
if (services.analytics.setServerContext) {
|
||||||
(services.analytics as any).setServerContext({
|
services.analytics.setServerContext({
|
||||||
userAgent: req.headers.get("user-agent") || undefined,
|
userAgent: req.headers.get("user-agent") || undefined,
|
||||||
language: req.headers.get("accept-language")?.split(",")[0] || undefined,
|
language: req.headers.get("accept-language")?.split(",")[0] || undefined,
|
||||||
referrer: req.headers.get("referer") || undefined,
|
referrer: req.headers.get("referer") || undefined,
|
||||||
|
|||||||
@@ -73,4 +73,15 @@ export interface AnalyticsService {
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
trackPageview(url?: string): void;
|
trackPageview(url?: string): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the server-side context for the current request.
|
||||||
|
* This is used for server-side tracking (e.g. from Next.js proxy).
|
||||||
|
*/
|
||||||
|
setServerContext?(context: {
|
||||||
|
userAgent?: string;
|
||||||
|
language?: string;
|
||||||
|
referrer?: string;
|
||||||
|
ip?: string;
|
||||||
|
}): void;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,4 +68,16 @@ export class NoopAnalyticsService implements AnalyticsService {
|
|||||||
trackPageview(_url?: string) {
|
trackPageview(_url?: string) {
|
||||||
// intentionally noop - analytics are disabled
|
// intentionally noop - analytics are disabled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No-op implementation of setServerContext.
|
||||||
|
*/
|
||||||
|
setServerContext(_context: {
|
||||||
|
userAgent?: string;
|
||||||
|
language?: string;
|
||||||
|
referrer?: string;
|
||||||
|
ip?: string;
|
||||||
|
}) {
|
||||||
|
// intentionally noop - analytics are disabled
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user