Skip to content

Commit c55a3f6

Browse files
committed
feat(server): add support for ignoring metrics
1 parent 1088710 commit c55a3f6

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

packages/analytics/src/server/headers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export function parseUserAgent(headers: Headers) {
3838
return headers.get("User-Agent") ?? "";
3939
}
4040

41-
export function parseHeaders(headers: Headers, ignoredMetrics: IgnoredMetrics) {
41+
export function parseHeaders(headers: Headers, ignoredMetrics: IgnoredMetrics = {}) {
4242
return {
4343
ua: !ignoredMetrics.userAgent ? parseUserAgent(headers) : "",
4444

packages/analytics/src/server/interfaces.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,16 @@ export type ServerContextWithRequest = { request: Request };
4646

4747
export type HeaderOnlyContext = { headers: Headers };
4848

49-
export type ServerContextWithPath = { path: string; headers: Headers, searchParams?: Record<string, string | string[] | undefined> };
49+
export type ServerContextWithPath = {
50+
path: string;
51+
headers: Headers;
52+
searchParams?: Record<string, string | string[] | undefined>;
53+
};
54+
55+
export interface TrackingOptions {
56+
hostname?: string | undefined;
57+
strictUtm?: boolean | undefined;
58+
ignoreMetrics?: IgnoredMetrics | undefined;
59+
collectDnt?: boolean | undefined;
60+
metadata?: AnalyticsMetadata;
61+
}

packages/analytics/src/server/simple-analytics.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import "server-only";
22

3-
import { AnalyticsEvent, AnalyticsPageview, HeaderOnlyContext, ServerContext } from "./interfaces";
4-
import type { AnalyticsMetadata } from "../interfaces";
3+
import {
4+
AnalyticsEvent,
5+
AnalyticsPageview,
6+
TrackingOptions,
7+
HeaderOnlyContext,
8+
ServerContext,
9+
} from "./interfaces";
510
import { isDoNotTrackEnabled, parseRequest } from "./utils";
611
import { parseHeaders } from "./headers";
712
import { parseUtmParameters } from "./utm";
@@ -32,7 +37,7 @@ export async function trackEvent(
3237
hostname,
3338
event: eventName,
3439
metadata: options.metadata,
35-
...(parseHeaders(headers, {})),
40+
...parseHeaders(headers, options.ignoreMetrics),
3641
};
3742

3843
const response = await fetch("https://queue.simpleanalyticscdn.com/events", {
@@ -57,11 +62,7 @@ export async function trackEvent(
5762

5863
const PROXY_PATHS = /^\/(proxy\.js|auto-events\.js|simple\/.*)$/;
5964

60-
type TrackPageviewOptions = {
61-
hostname?: string | undefined;
62-
metadata?: AnalyticsMetadata;
63-
collectDnt?: boolean | undefined;
64-
} & ServerContext;
65+
type TrackPageviewOptions = TrackingOptions & ServerContext;
6566

6667
export async function trackPageview(options: TrackPageviewOptions) {
6768
const hostname = options.hostname ?? process.env.SIMPLE_ANALYTICS_HOSTNAME;
@@ -95,7 +96,10 @@ export async function trackPageview(options: TrackPageviewOptions) {
9596
hostname,
9697
event: "pageview",
9798
path,
98-
...(searchParams ? parseUtmParameters(searchParams, { strictUtm: false }) : {}),
99+
...parseHeaders(headers, options.ignoreMetrics),
100+
...(searchParams
101+
? parseUtmParameters(searchParams, { strictUtm: options.strictUtm ?? true })
102+
: {}),
99103
};
100104

101105
const response = await fetch("https://queue.simpleanalyticscdn.com/events", {

0 commit comments

Comments
 (0)