From a34334d35c44faa8fee9e25b4a36ef89845c6bf1 Mon Sep 17 00:00:00 2001 From: Dmytro Nedolia Date: Tue, 3 Jun 2025 18:04:22 +0200 Subject: [PATCH 1/2] Add onSessionChangeCallback to SessionConfiguration and update session handling logic --- .../react-native-tracker/src/plugins/session/index.ts | 11 +++++++++-- trackers/react-native-tracker/src/types.ts | 4 ++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/trackers/react-native-tracker/src/plugins/session/index.ts b/trackers/react-native-tracker/src/plugins/session/index.ts index 41dfdd5e6..cbe73c3e8 100644 --- a/trackers/react-native-tracker/src/plugins/session/index.ts +++ b/trackers/react-native-tracker/src/plugins/session/index.ts @@ -57,6 +57,7 @@ export async function newSessionPlugin({ sessionContext = true, foregroundSessionTimeout, backgroundSessionTimeout, + onSessionChangeCallback, }: TrackerConfiguration & SessionConfiguration & { asyncStorage: AsyncStorage }): Promise { let sessionState = await resumeStoredSession(namespace, asyncStorage); await storeSessionState(namespace, sessionState, asyncStorage); @@ -82,7 +83,8 @@ export async function newSessionPlugin({ // check if session has timed out and start a new one if necessary const now = new Date(); const timeDiff = now.getTime() - lastUpdateTs; - if (timeDiff > getTimeoutMs()) { + const didPreviousSessionTimeout = timeDiff > getTimeoutMs(); + if (didPreviousSessionTimeout) { startNewSession(); storeSessionState(namespace, sessionState, asyncStorage); } @@ -90,7 +92,8 @@ export async function newSessionPlugin({ // update event properties sessionState.eventIndex = (sessionState.eventIndex ?? 0) + 1; - if (sessionState.eventIndex === 1) { + const isFirstEvent = sessionState.eventIndex === 1; + if (isFirstEvent) { sessionState.firstEventId = payloadBuilder.getPayload().eid as string; sessionState.firstEventTimestamp = now.toISOString(); } @@ -112,6 +115,10 @@ export async function newSessionPlugin({ data: { ...sessionState }, }); } + + if (didPreviousSessionTimeout || isFirstEvent) { + onSessionChangeCallback?.(sessionState); + } }; return { diff --git a/trackers/react-native-tracker/src/types.ts b/trackers/react-native-tracker/src/types.ts index 34f74bf6a..4240f45ef 100755 --- a/trackers/react-native-tracker/src/types.ts +++ b/trackers/react-native-tracker/src/types.ts @@ -59,6 +59,10 @@ export interface SessionConfiguration { * @defaultValue true */ sessionContext?: boolean; + /** + * A callback function that is called when the session changes + */ + onSessionChangeCallback?: (session: SessionState) => void; } /** From 92ecfa863b106146deeee347c6186d6edcf53fd8 Mon Sep 17 00:00:00 2001 From: Dmytro Nedolia Date: Tue, 3 Jun 2025 18:16:08 +0200 Subject: [PATCH 2/2] Rename onSessionChangeCallback to onSessionUpdateCallback in SessionConfiguration and update related session handling logic --- trackers/react-native-tracker/src/plugins/session/index.ts | 4 ++-- trackers/react-native-tracker/src/types.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/trackers/react-native-tracker/src/plugins/session/index.ts b/trackers/react-native-tracker/src/plugins/session/index.ts index cbe73c3e8..83d615cc5 100644 --- a/trackers/react-native-tracker/src/plugins/session/index.ts +++ b/trackers/react-native-tracker/src/plugins/session/index.ts @@ -57,7 +57,7 @@ export async function newSessionPlugin({ sessionContext = true, foregroundSessionTimeout, backgroundSessionTimeout, - onSessionChangeCallback, + onSessionUpdateCallback, }: TrackerConfiguration & SessionConfiguration & { asyncStorage: AsyncStorage }): Promise { let sessionState = await resumeStoredSession(namespace, asyncStorage); await storeSessionState(namespace, sessionState, asyncStorage); @@ -117,7 +117,7 @@ export async function newSessionPlugin({ } if (didPreviousSessionTimeout || isFirstEvent) { - onSessionChangeCallback?.(sessionState); + onSessionUpdateCallback?.(sessionState); } }; diff --git a/trackers/react-native-tracker/src/types.ts b/trackers/react-native-tracker/src/types.ts index 4240f45ef..e92e228ef 100755 --- a/trackers/react-native-tracker/src/types.ts +++ b/trackers/react-native-tracker/src/types.ts @@ -62,7 +62,7 @@ export interface SessionConfiguration { /** * A callback function that is called when the session changes */ - onSessionChangeCallback?: (session: SessionState) => void; + onSessionUpdateCallback?: (session: SessionState) => void; } /**