Skip to content

Commit 0f2c91e

Browse files
authored
feat: add cookies to the log (#3528)
Add whitelisted cookies to log events
1 parent 0e33a00 commit 0f2c91e

File tree

4 files changed

+28
-1
lines changed

4 files changed

+28
-1
lines changed

.idea/vcs.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/shared/src/hooks/log/useLogQueue.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export interface LogEvent extends Record<string, unknown> {
1111
event_name: string;
1212
extra?: string;
1313
device_id?: string;
14+
cookies?: string;
1415
}
1516

1617
export type PushToQueueFunc = (events: LogEvent[]) => void;

packages/shared/src/hooks/log/useLogSharedProps.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import { useRouter } from 'next/router';
99
import { LogEvent } from './useLogQueue';
1010
import SettingsContext from '../../contexts/SettingsContext';
1111
import AuthContext from '../../contexts/AuthContext';
12+
import { getCookies } from '../../lib/cookie';
13+
14+
const COOKIES = ['_ga', '_fbp', '_fbc'];
1215

1316
export default function useLogSharedProps(
1417
app: string,
@@ -51,6 +54,7 @@ export default function useLogSharedProps(
5154
});
5255

5356
const queryStr = JSON.stringify(queryObject);
57+
const cookies = JSON.stringify(getCookies(COOKIES));
5458

5559
(sharedPropsRef.current?.device_id
5660
? Promise.resolve(sharedPropsRef.current.device_id)
@@ -76,6 +80,7 @@ export default function useLogSharedProps(
7680
utm_term: query?.utm_term,
7781
visit_id: visitId,
7882
device_id: _deviceId,
83+
cookies: cookies === '{}' ? undefined : cookies,
7984
};
8085
setSharedPropsSet(true);
8186
});

packages/shared/src/lib/cookie.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,27 @@ export type CookieOptions = {
1010
secure: boolean;
1111
};
1212

13+
export const getCookies = (
14+
names: string[],
15+
): Record<string, string> | undefined => {
16+
const cookies =
17+
document?.cookie?.split(';')?.map((cookie) => cookie.trim()) || [];
18+
if (!cookies.length) {
19+
return undefined;
20+
}
21+
22+
return names.reduce((acc, name) => {
23+
const foundCookie = cookies.find((cookie) => cookie.startsWith(`${name}=`));
24+
if (!foundCookie) {
25+
return acc;
26+
}
27+
return {
28+
...acc,
29+
[name]: decodeURIComponent(foundCookie.split('=')[1]),
30+
};
31+
}, {});
32+
};
33+
1334
export const setCookie = (
1435
name: string,
1536
value: string | number | boolean,

0 commit comments

Comments
 (0)