From 1cbb1550dd0586236e4db519302c4216e20407d6 Mon Sep 17 00:00:00 2001 From: Ildar Nurislamov Date: Wed, 20 Dec 2023 14:43:40 +0400 Subject: [PATCH] analytics-plugin: make sure that user traits or groups traits always returns object --- libs/jitsu-js/src/analytics-plugin.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libs/jitsu-js/src/analytics-plugin.ts b/libs/jitsu-js/src/analytics-plugin.ts index 7b627b397..44b19312a 100644 --- a/libs/jitsu-js/src/analytics-plugin.ts +++ b/libs/jitsu-js/src/analytics-plugin.ts @@ -67,10 +67,16 @@ function restoreTraits(storage: PersistentStorage) { if (typeof val === "string") { val = safeCall(() => JSON.parse(val), {}); } + if (typeof val !== "object" || val === null) { + val = {}; + } let groupVal = storage.getItem("__group_traits"); if (typeof groupVal === "string") { groupVal = safeCall(() => JSON.parse(groupVal), {}); } + if (typeof groupVal !== "object" || groupVal === null) { + groupVal = {}; + } return { ...(groupVal || {}), ...(val || {}), //user traits override group traits @@ -619,7 +625,9 @@ const jitsuAnalyticsPlugin = (pluginConfig: JitsuPluginConfig = {}): AnalyticsPl // Store traits in cache to be able to use them in page and track events that run asynchronously with current identify. const storage = pluginConfig.storageWrapper ? pluginConfig.storageWrapper(instance.storage) : instance.storage; storage.setItem("__user_id", payload.userId); - storage.setItem("__user_traits", payload.traits); + if (payload.traits && typeof payload.traits === "object") { + storage.setItem("__user_traits", payload.traits); + } return send("identify", payload, config, instance, storage); }, reset: args => {