@databuddy/sdk 2.3.22 → 2.3.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- export { c as createScript, i as isScriptInjected } from '../shared/@databuddy/sdk.C8vEu9Y4.mjs';
1
+ export { c as createScript, i as isScriptInjected } from '../shared/@databuddy/sdk.DQLu36uX.mjs';
2
2
 
3
3
  function detectClientId(providedClientId) {
4
4
  if (providedClientId) {
@@ -2,9 +2,9 @@
2
2
 
3
3
  import { detectClientId } from '../core/index.mjs';
4
4
  export { clear, flush, getAnonymousId, getSessionId, getTracker, getTrackingIds, getTrackingParams, isTrackerAvailable, track, trackError } from '../core/index.mjs';
5
- import { i as isScriptInjected, c as createScript } from '../shared/@databuddy/sdk.C8vEu9Y4.mjs';
5
+ import { i as isScriptInjected, c as createScript } from '../shared/@databuddy/sdk.DQLu36uX.mjs';
6
6
  import React, { useRef, useMemo, useEffect, useSyncExternalStore, createContext, useContext } from 'react';
7
- import { B as BrowserFlagStorage, C as CoreFlagsManager } from '../shared/@databuddy/sdk.DBtQ5j2L.mjs';
7
+ import { B as BrowserFlagStorage, C as CoreFlagsManager } from '../shared/@databuddy/sdk.csCQ7WQR.mjs';
8
8
  import { l as logger } from '../shared/@databuddy/sdk.DCKr2Zpd.mjs';
9
9
 
10
10
  function Databuddy(props) {
@@ -1,4 +1,4 @@
1
- const version = "2.3.21";
1
+ const version = "2.3.22";
2
2
 
3
3
  const INJECTED_SCRIPT_ATTRIBUTE = "data-databuddy-injected";
4
4
  function isScriptInjected() {
@@ -142,6 +142,7 @@ class BrowserFlagStorage {
142
142
  }
143
143
  }
144
144
 
145
+ const ANONYMOUS_ID_KEY = "did";
145
146
  class CoreFlagsManager {
146
147
  config;
147
148
  storage;
@@ -174,11 +175,45 @@ class CoreFlagsManager {
174
175
  this.setupVisibilityListener();
175
176
  this.initialize();
176
177
  }
178
+ /**
179
+ * Get or create anonymous ID for deterministic rollouts.
180
+ * Uses the same storage key as the tracker ("did") for consistency.
181
+ */
182
+ getOrCreateAnonymousId() {
183
+ if (typeof localStorage === "undefined") {
184
+ return null;
185
+ }
186
+ try {
187
+ let id = localStorage.getItem(ANONYMOUS_ID_KEY);
188
+ if (id) {
189
+ return id;
190
+ }
191
+ id = `anon_${crypto.randomUUID()}`;
192
+ localStorage.setItem(ANONYMOUS_ID_KEY, id);
193
+ return id;
194
+ } catch {
195
+ return null;
196
+ }
197
+ }
198
+ /**
199
+ * Ensure user context has an identifier for deterministic flag evaluation.
200
+ * If no userId/email provided, inject anonymous ID as userId.
201
+ */
202
+ ensureUserIdentity(user) {
203
+ if (user?.userId || user?.email) {
204
+ return user;
205
+ }
206
+ const anonymousId = this.getOrCreateAnonymousId();
207
+ if (!anonymousId) {
208
+ return user;
209
+ }
210
+ return { ...user, userId: anonymousId };
211
+ }
177
212
  withDefaults(config) {
178
213
  return {
179
214
  clientId: config.clientId,
180
215
  apiUrl: config.apiUrl ?? "https://api.databuddy.cc",
181
- user: config.user,
216
+ user: this.ensureUserIdentity(config.user),
182
217
  disabled: config.disabled ?? false,
183
218
  debug: config.debug ?? false,
184
219
  skipStorage: config.skipStorage ?? false,
@@ -459,7 +494,7 @@ class CoreFlagsManager {
459
494
  * Update user context and refresh flags
460
495
  */
461
496
  updateUser(user) {
462
- this.config = { ...this.config, user };
497
+ this.config = { ...this.config, user: this.ensureUserIdentity(user) };
463
498
  this.batcher?.destroy();
464
499
  this.batcher = null;
465
500
  this.onConfigUpdate?.(this.config);
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, ref, onMounted, onUnmounted, watch, reactive, watchEffect, computed } from 'vue';
2
- import { i as isScriptInjected, c as createScript } from '../shared/@databuddy/sdk.C8vEu9Y4.mjs';
3
- import { B as BrowserFlagStorage, C as CoreFlagsManager } from '../shared/@databuddy/sdk.DBtQ5j2L.mjs';
2
+ import { i as isScriptInjected, c as createScript } from '../shared/@databuddy/sdk.DQLu36uX.mjs';
3
+ import { B as BrowserFlagStorage, C as CoreFlagsManager } from '../shared/@databuddy/sdk.csCQ7WQR.mjs';
4
4
  import '../shared/@databuddy/sdk.DCKr2Zpd.mjs';
5
5
 
6
6
  const Databuddy = defineComponent({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@databuddy/sdk",
3
- "version": "2.3.22",
3
+ "version": "2.3.23",
4
4
  "description": "Official Databuddy Analytics SDK",
5
5
  "main": "./dist/core/index.mjs",
6
6
  "types": "./dist/core/index.d.ts",