saltfish 0.2.35 → 0.2.36

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.
@@ -1765,33 +1765,6 @@ __publicField(ErrorHandler, "DEFAULT_OPTIONS", {
1765
1765
  shouldTriggerEvent: false,
1766
1766
  shouldDestroy: false
1767
1767
  });
1768
- function detectUserLanguage() {
1769
- try {
1770
- const browserLang = navigator.language || navigator.userLanguage;
1771
- if (!browserLang) {
1772
- return void 0;
1773
- }
1774
- const normalizedLang = browserLang.split("-")[0].toLowerCase();
1775
- debug(`LanguageDetector: Detected browser language: ${browserLang}, normalized to: ${normalizedLang}`);
1776
- return normalizedLang;
1777
- } catch (error2) {
1778
- return void 0;
1779
- }
1780
- }
1781
- function normalizeLanguageCode(language) {
1782
- return language.split("-")[0].toLowerCase();
1783
- }
1784
- function processLanguageConfig(configLanguage) {
1785
- if (!configLanguage) {
1786
- return void 0;
1787
- }
1788
- if (configLanguage === "auto") {
1789
- const detectedLang = detectUserLanguage();
1790
- return detectedLang;
1791
- }
1792
- const normalizedLang = normalizeLanguageCode(configLanguage);
1793
- return normalizedLang;
1794
- }
1795
1768
  class PlayerInitializationService {
1796
1769
  constructor(managers) {
1797
1770
  __publicField(this, "managers");
@@ -1846,10 +1819,8 @@ class PlayerInitializationService {
1846
1819
  }
1847
1820
  );
1848
1821
  }
1849
- const processedLanguage = processLanguageConfig(config.language);
1850
1822
  const updatedConfig = {
1851
1823
  ...config,
1852
- language: processedLanguage,
1853
1824
  showLogo: data.showLogo !== false
1854
1825
  // Default to true if not specified
1855
1826
  };
@@ -1909,6 +1880,7 @@ class PlayerInitializationService {
1909
1880
  return;
1910
1881
  }
1911
1882
  log("[PlayerInitializationService.fetchUserData] Fetching user data for userId:", userId);
1883
+ log("[PlayerInitializationService.fetchUserData] userData being sent to backend:", userData);
1912
1884
  const response = await fetch(`https://player.saltfish.ai/clients/${store.config.token}/users/${userId}`, {
1913
1885
  method: "POST",
1914
1886
  headers: {
@@ -1929,7 +1901,9 @@ class PlayerInitializationService {
1929
1901
  log("[PlayerInitializationService.fetchUserData] User data fetched successfully:", data);
1930
1902
  if (data.success) {
1931
1903
  store.setUserData({
1932
- watchedPlaylists: data.watchedPlaylists || {}
1904
+ watchedPlaylists: data.watchedPlaylists || {},
1905
+ language: data.language
1906
+ // Store language from backend if available
1933
1907
  });
1934
1908
  const userListAssignments = data.userListAssignments || {};
1935
1909
  const existingAssignments = data.abTestAssignments || {};
@@ -2004,7 +1978,9 @@ class PlayerInitializationService {
2004
1978
  this.managers.storageManager.setAnonymousUserData(anonymousUserData);
2005
1979
  const store = useSaltfishStore.getState();
2006
1980
  store.setUserData({
2007
- watchedPlaylists: anonymousUserData.watchedPlaylists || {}
1981
+ watchedPlaylists: anonymousUserData.watchedPlaylists || {},
1982
+ language: userData == null ? void 0 : userData.language
1983
+ // Store language from userData
2008
1984
  });
2009
1985
  this.managers.eventManager.trigger("userDataLoaded", {
2010
1986
  timestamp: Date.now(),
@@ -2103,6 +2079,33 @@ class PlayerInitializationService {
2103
2079
  this.lastConfig = null;
2104
2080
  }
2105
2081
  }
2082
+ function detectUserLanguage() {
2083
+ try {
2084
+ const browserLang = navigator.language || navigator.userLanguage;
2085
+ if (!browserLang) {
2086
+ return void 0;
2087
+ }
2088
+ const normalizedLang = browserLang.split("-")[0].toLowerCase();
2089
+ debug(`LanguageDetector: Detected browser language: ${browserLang}, normalized to: ${normalizedLang}`);
2090
+ return normalizedLang;
2091
+ } catch (error2) {
2092
+ return void 0;
2093
+ }
2094
+ }
2095
+ function normalizeLanguageCode(language) {
2096
+ return language.split("-")[0].toLowerCase();
2097
+ }
2098
+ function processLanguageConfig(configLanguage) {
2099
+ if (!configLanguage) {
2100
+ return void 0;
2101
+ }
2102
+ if (configLanguage === "auto") {
2103
+ const detectedLang = detectUserLanguage();
2104
+ return detectedLang;
2105
+ }
2106
+ const normalizedLang = normalizeLanguageCode(configLanguage);
2107
+ return normalizedLang;
2108
+ }
2106
2109
  class UserManagementService {
2107
2110
  constructor(managers) {
2108
2111
  __publicField(this, "managers");
@@ -2137,12 +2140,21 @@ class UserManagementService {
2137
2140
  * Identify a user with ID and optional data
2138
2141
  */
2139
2142
  identifyUser(userId, userData) {
2140
- this.lastUserIdentification = { userId, userData };
2143
+ let processedUserData = userData;
2144
+ if (userData && typeof userData.language === "string") {
2145
+ const processedLanguage = processLanguageConfig(userData.language);
2146
+ processedUserData = {
2147
+ ...userData,
2148
+ language: processedLanguage
2149
+ };
2150
+ log(`UserManagementService: Processed language from userData: ${userData.language} -> ${processedLanguage}`);
2151
+ }
2152
+ this.lastUserIdentification = { userId, userData: processedUserData };
2141
2153
  const store = useSaltfishStore.getState();
2142
- store.identifyUser(userId, userData);
2154
+ store.identifyUser(userId, processedUserData);
2143
2155
  this.managers.analyticsManager.setUser({
2144
2156
  id: userId,
2145
- ...userData
2157
+ ...processedUserData
2146
2158
  });
2147
2159
  const abTests = store.abTests || [];
2148
2160
  const hasABTests = abTests.length > 0;
@@ -2152,7 +2164,7 @@ class UserManagementService {
2152
2164
  });
2153
2165
  }
2154
2166
  if (this.playerInitializationService) {
2155
- this.playerInitializationService.fetchUserData(userId, userData);
2167
+ this.playerInitializationService.fetchUserData(userId, processedUserData);
2156
2168
  }
2157
2169
  }
2158
2170
  /**
@@ -2162,15 +2174,24 @@ class UserManagementService {
2162
2174
  if (!this.playerInitializationService) {
2163
2175
  throw new Error("PlayerInitializationService not set");
2164
2176
  }
2177
+ let processedUserData = userData;
2178
+ if (userData && typeof userData.language === "string") {
2179
+ const processedLanguage = processLanguageConfig(userData.language);
2180
+ processedUserData = {
2181
+ ...userData,
2182
+ language: processedLanguage
2183
+ };
2184
+ log(`UserManagementService: Processed language from userData (anonymous): ${userData.language} -> ${processedLanguage}`);
2185
+ }
2165
2186
  const userId = this.playerInitializationService.getOrCreateAnonymousUserId();
2166
- this.lastUserIdentification = { userId, userData };
2187
+ this.lastUserIdentification = { userId, userData: processedUserData };
2167
2188
  const store = useSaltfishStore.getState();
2168
- store.identifyUser(userId, { ...userData, __isAnonymous: true });
2189
+ store.identifyUser(userId, { ...processedUserData, __isAnonymous: true });
2169
2190
  this.managers.analyticsManager.setUser({
2170
2191
  id: userId,
2171
- ...userData
2192
+ ...processedUserData
2172
2193
  });
2173
- await this.playerInitializationService.loadAnonymousUserData(userId, userData);
2194
+ await this.playerInitializationService.loadAnonymousUserData(userId, processedUserData);
2174
2195
  }
2175
2196
  /**
2176
2197
  * Record A/B test attempt for analytics
@@ -2798,7 +2819,7 @@ class StateMachineActionHandler {
2798
2819
  getVideoUrl(step) {
2799
2820
  var _a;
2800
2821
  const store = useSaltfishStore.getState();
2801
- const language = (_a = store.config) == null ? void 0 : _a.language;
2822
+ const language = (_a = store.userData) == null ? void 0 : _a.language;
2802
2823
  if (language && step.translations && step.translations[language]) {
2803
2824
  const translation = step.translations[language];
2804
2825
  return translation.videoUrl;
@@ -2940,7 +2961,7 @@ class StateMachineActionHandler {
2940
2961
  const currentPlaylistId = (_a = store.manifest) == null ? void 0 : _a.id;
2941
2962
  const currentPlaylist = (_b = store.backendPlaylists) == null ? void 0 : _b.find((p) => p.id === currentPlaylistId);
2942
2963
  const captionsEnabled = (currentPlaylist == null ? void 0 : currentPlaylist.captions) === true;
2943
- const language = (_c = store.config) == null ? void 0 : _c.language;
2964
+ const language = (_c = store.userData) == null ? void 0 : _c.language;
2944
2965
  let transcript = currentStep.transcript;
2945
2966
  if (language && currentStep.translations && currentStep.translations[language]) {
2946
2967
  const translatedTranscript = currentStep.translations[language].transcript;
@@ -3058,7 +3079,7 @@ class StateMachineActionHandler {
3058
3079
  const currentPlaylistId = (_a = store.manifest) == null ? void 0 : _a.id;
3059
3080
  const currentPlaylist = (_b = store.backendPlaylists) == null ? void 0 : _b.find((p) => p.id === currentPlaylistId);
3060
3081
  const captionsEnabled = (currentPlaylist == null ? void 0 : currentPlaylist.captions) === true;
3061
- const language = (_c = store.config) == null ? void 0 : _c.language;
3082
+ const language = (_c = store.userData) == null ? void 0 : _c.language;
3062
3083
  let transcript = currentStep.transcript;
3063
3084
  if (language && currentStep.translations && currentStep.translations[language]) {
3064
3085
  const translation = currentStep.translations[language];
@@ -10283,7 +10304,7 @@ const SaltfishPlayer$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.de
10283
10304
  __proto__: null,
10284
10305
  SaltfishPlayer
10285
10306
  }, Symbol.toStringTag, { value: "Module" }));
10286
- const version = "0.2.35";
10307
+ const version = "0.2.36";
10287
10308
  const packageJson = {
10288
10309
  version
10289
10310
  };
@@ -10323,7 +10344,7 @@ function createAPI() {
10323
10344
  // Default to true
10324
10345
  ...config
10325
10346
  };
10326
- info(`Saltfish initialized: analytics=${fullConfig.enableAnalytics}, language=${fullConfig.language || "default"}`);
10347
+ info(`Saltfish initialized: analytics=${fullConfig.enableAnalytics}`);
10327
10348
  isInitializing = true;
10328
10349
  initPromise = player.initialize(fullConfig).then(() => {
10329
10350
  isInitialized = true;