fix: duplicate session start (race condition) + remove old device id handling

This commit is contained in:
Carl-Gerhard Lindesvärd
2026-02-27 09:56:51 +01:00
parent a42adcdbfb
commit 928c44ef6a
6 changed files with 87 additions and 105 deletions

View File

@@ -30,8 +30,7 @@ vi.mock('@openpanel/db', async () => {
// 30 minutes
const SESSION_TIMEOUT = 30 * 60 * 1000;
const projectId = 'test-project';
const currentDeviceId = 'device-123';
const previousDeviceId = 'device-456';
const deviceId = 'device-123';
// Valid UUID used when creating a new session in tests
const newSessionId = 'a1b2c3d4-e5f6-4789-a012-345678901234';
const geo = {
@@ -90,14 +89,12 @@ describe('incomingEvent', () => {
'openpanel-sdk-version': '1.0.0',
},
projectId,
currentDeviceId,
previousDeviceId,
deviceId: currentDeviceId,
deviceId,
sessionId: newSessionId,
};
const event = {
name: 'test_event',
deviceId: currentDeviceId,
deviceId,
profileId: '',
sessionId: expect.stringMatching(
// biome-ignore lint/performance/useTopLevelRegex: test
@@ -145,7 +142,7 @@ describe('incomingEvent', () => {
},
{
delay: SESSION_TIMEOUT,
jobId: `sessionEnd:${projectId}:${currentDeviceId}`,
jobId: `sessionEnd:${projectId}:${deviceId}`,
attempts: 3,
backoff: {
delay: 200,
@@ -185,9 +182,7 @@ describe('incomingEvent', () => {
},
uaInfo,
projectId,
currentDeviceId,
previousDeviceId,
deviceId: currentDeviceId,
deviceId,
sessionId: 'session-123',
};
@@ -201,9 +196,7 @@ describe('incomingEvent', () => {
type: 'createSessionEnd',
payload: {
sessionId: 'session-123',
deviceId: currentDeviceId,
profileId: currentDeviceId,
projectId,
deviceId,
},
},
} as Partial<Job> as Job);
@@ -212,7 +205,7 @@ describe('incomingEvent', () => {
const event = {
name: 'test_event',
deviceId: currentDeviceId,
deviceId,
profileId: '',
sessionId: 'session-123',
projectId,
@@ -268,8 +261,6 @@ describe('incomingEvent', () => {
'request-id': '123',
},
projectId,
currentDeviceId: '',
previousDeviceId: '',
deviceId: '',
sessionId: '',
uaInfo: uaInfoServer,
@@ -374,8 +365,6 @@ describe('incomingEvent', () => {
'request-id': '123',
},
projectId,
currentDeviceId: '',
previousDeviceId: '',
deviceId: '',
sessionId: '',
uaInfo: uaInfoServer,