diff --git a/src/api/config.ts b/src/api/config.ts index 5a3841e7..d544b176 100644 --- a/src/api/config.ts +++ b/src/api/config.ts @@ -4,6 +4,7 @@ import Http from '../http'; import Logger from '../logger'; import Session from '../session'; import Navigator from '../navigator'; +import Storage from '../storage'; import type { RadarTrackParams } from '../types'; @@ -16,12 +17,14 @@ class ConfigAPI { return; } + const id = Storage.getItem(Storage.ID) || undefined; const deviceId = params.deviceId || Device.getDeviceId(); const installId = params.installId || Device.getInstallId(); const sessionId = Session.getSessionId(); const locationAuthorization = await Navigator.getPermissionStatus(); - const data = { + const data: any = { + id, deviceId, installId, sessionId, diff --git a/src/api/conversions.ts b/src/api/conversions.ts index 60d10803..12b63410 100644 --- a/src/api/conversions.ts +++ b/src/api/conversions.ts @@ -10,17 +10,20 @@ class ConversionsAPI { const options = Config.get(); const name = params.name; - const userId = params.userId || Storage.getItem(Storage.USER_ID); - const deviceId = params.deviceId || Device.getDeviceId(); - const installId = params.installId || Device.getInstallId(); const metadata = params.metadata || {}; const createdAt = params.createdAt; + const id = Storage.getItem(Storage.ID); + const userId = params.userId || Storage.getItem(Storage.USER_ID); + const deviceId = params.deviceId || Device.getDeviceId(); + const installId = params.installId || Device.getInstallId(); + if (params.revenue) { metadata.revenue = params.revenue; } const data: any = { + id, name, userId, deviceId, diff --git a/src/api/track.ts b/src/api/track.ts index 3862a44a..4970d6b9 100644 --- a/src/api/track.ts +++ b/src/api/track.ts @@ -36,6 +36,7 @@ class TrackAPI { } // user indentification fields + const id = Storage.getItem(Storage.ID) || undefined; // `undefined` so it's removed from any fields const userId = params.userId || Storage.getItem(Storage.USER_ID); const deviceId = params.deviceId || Device.getDeviceId(); const installId = params.installId || Device.getInstallId(); @@ -84,6 +85,7 @@ class TrackAPI { userId, tripOptions, timeZone, + id, }; let response: any; @@ -99,6 +101,7 @@ class TrackAPI { method: 'GET', path: 'config', data: { + id, deviceId, installId, sessionId, @@ -182,6 +185,10 @@ class TrackAPI { _id, } as RadarTrackVerifiedResponse; + if (user) { + Storage.setItem(Storage.ID, user._id); + } + if (options.debug) { trackRes.response = response; } @@ -189,6 +196,7 @@ class TrackAPI { return trackRes; } + // unverified track response = await Http.request({ method: 'POST', path: 'track', @@ -204,6 +212,8 @@ class TrackAPI { location, } as RadarTrackResponse; + Storage.setItem(Storage.ID, user?._id); + if (options.debug) { trackRes.response = response; } diff --git a/src/storage.ts b/src/storage.ts index 1555162a..27798a37 100644 --- a/src/storage.ts +++ b/src/storage.ts @@ -3,6 +3,9 @@ import Logger from './logger'; class Storage { // local storage key definitions for identifying track users + public static get ID() { + return 'radar-id'; + } public static get USER_ID() { return 'radar-userId'; } @@ -41,6 +44,14 @@ class Storage { if (!storage) { return; } + // clear id if user_id doesn't match previous + if (key == this.USER_ID) { + const previousUserId = this.getItem(this.USER_ID); + if (previousUserId !== value) { + storage.removeItem(this.ID); + console.log("User id mismatch, removing ID"); + } + } if (value === undefined || value === null) { return; }