From 0fead1125a70dfc2f46c4710b626f599b8117e84 Mon Sep 17 00:00:00 2001 From: tyiuhc Date: Thu, 9 Jan 2025 13:41:18 -0800 Subject: [PATCH 1/4] fix: migrate to use web_exp_id for web experiment device_id bucketing --- packages/experiment-tag/src/experiment.ts | 30 ++++++++++------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/packages/experiment-tag/src/experiment.ts b/packages/experiment-tag/src/experiment.ts index dcc3e370..fe05c3e9 100644 --- a/packages/experiment-tag/src/experiment.ts +++ b/packages/experiment-tag/src/experiment.ts @@ -59,24 +59,20 @@ export const initializeExperiment = async ( user = {}; } - // create new user if it does not exist, or it does not have device_id or web_exp_id - if (Object.keys(user).length === 0 || !user.device_id || !user.web_exp_id) { - if (!user.device_id || !user.web_exp_id) { - // if user has device_id, migrate it to web_exp_id - if (user.device_id) { - user.web_exp_id = user.device_id; - } else if (user.web_exp_id) { - user.device_id = user.web_exp_id; - } else { - const uuid = UUID(); - // both IDs are set for backwards compatibility, to be removed in future update - user = { device_id: uuid, web_exp_id: uuid }; - } - globalScope.localStorage.setItem( - experimentStorageName, - JSON.stringify(user), - ); + // create new user if it does not exist, or it does not have web_exp_id + if (Object.keys(user).length === 0 || !user.web_exp_id) { + // if user has device_id, migrate it to web_exp_id + if (user.device_id) { + user.web_exp_id = user.device_id; + delete user.device_id; + } else { + const uuid = UUID(); + user = { web_exp_id: uuid }; } + globalScope.localStorage.setItem( + experimentStorageName, + JSON.stringify(user), + ); } const urlParams = getUrlParams(); From bcee1efa6e521a27b0b8fe16f39f5a8c15fe7ecf Mon Sep 17 00:00:00 2001 From: tyiuhc Date: Thu, 9 Jan 2025 14:23:21 -0800 Subject: [PATCH 2/4] refactor web_exp_id logic --- packages/experiment-tag/src/experiment.ts | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/experiment-tag/src/experiment.ts b/packages/experiment-tag/src/experiment.ts index fe05c3e9..dfe2b305 100644 --- a/packages/experiment-tag/src/experiment.ts +++ b/packages/experiment-tag/src/experiment.ts @@ -59,16 +59,18 @@ export const initializeExperiment = async ( user = {}; } - // create new user if it does not exist, or it does not have web_exp_id - if (Object.keys(user).length === 0 || !user.web_exp_id) { - // if user has device_id, migrate it to web_exp_id - if (user.device_id) { - user.web_exp_id = user.device_id; - delete user.device_id; - } else { - const uuid = UUID(); - user = { web_exp_id: uuid }; - } + // migrate device_id to web_exp_id if it exists + // if web_exp_id does not exist, create a new one + // if both web_exp_id and device_id exist, remove device_id + if (!user.web_exp_id) { + user.web_exp_id = user.device_id || UUID(); + delete user.device_id; + globalScope.localStorage.setItem( + experimentStorageName, + JSON.stringify(user), + ); + } else if (user.web_exp_id && user.device_id) { + delete user.device_id; globalScope.localStorage.setItem( experimentStorageName, JSON.stringify(user), From ccb1914ab1305cc3d6ce3b12e82ab8c5e24cde17 Mon Sep 17 00:00:00 2001 From: tyiuhc Date: Thu, 9 Jan 2025 14:51:48 -0800 Subject: [PATCH 3/4] fix tests --- packages/experiment-tag/test/experiment.test.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/experiment-tag/test/experiment.test.ts b/packages/experiment-tag/test/experiment.test.ts index 4838e524..71fec36a 100644 --- a/packages/experiment-tag/test/experiment.test.ts +++ b/packages/experiment-tag/test/experiment.test.ts @@ -55,12 +55,11 @@ describe('initializeExperiment', () => { test('should initialize experiment with empty user', () => { initializeExperiment(stringify(apiKey), JSON.stringify([])); expect(ExperimentClient.prototype.setUser).toHaveBeenCalledWith({ - device_id: 'mock', web_exp_id: 'mock', }); expect(mockGlobal.localStorage.setItem).toHaveBeenCalledWith( 'EXP_1', - JSON.stringify({ device_id: 'mock', web_exp_id: 'mock' }), + JSON.stringify({ web_exp_id: 'mock' }), ); }); From 612ce2617a157b597d4476ba67bb7cb59c37532e Mon Sep 17 00:00:00 2001 From: tyiuhc Date: Thu, 9 Jan 2025 18:24:30 -0800 Subject: [PATCH 4/4] nit: fix comment --- packages/experiment-tag/src/experiment.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/experiment-tag/src/experiment.ts b/packages/experiment-tag/src/experiment.ts index dfe2b305..6a1bcfe8 100644 --- a/packages/experiment-tag/src/experiment.ts +++ b/packages/experiment-tag/src/experiment.ts @@ -59,9 +59,10 @@ export const initializeExperiment = async ( user = {}; } - // migrate device_id to web_exp_id if it exists - // if web_exp_id does not exist, create a new one - // if both web_exp_id and device_id exist, remove device_id + // if web_exp_id does not exist: + // 1. if device_id exists, migrate device_id to web_exp_id and remove device_id + // 2. if device_id does not exist, create a new web_exp_id + // 3. if both device_id and web_exp_id exist, remove device_id if (!user.web_exp_id) { user.web_exp_id = user.device_id || UUID(); delete user.device_id;