saltfish 0.2.35 → 0.2.37

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;
@@ -2935,12 +2956,10 @@ class StateMachineActionHandler {
2935
2956
  });
2936
2957
  log("StateMachineActionHandler: Starting async video load");
2937
2958
  const loadTranscriptForStep = () => {
2938
- var _a, _b, _c;
2959
+ var _a, _b;
2939
2960
  const store = useSaltfishStore.getState();
2940
- const currentPlaylistId = (_a = store.manifest) == null ? void 0 : _a.id;
2941
- const currentPlaylist = (_b = store.backendPlaylists) == null ? void 0 : _b.find((p) => p.id === currentPlaylistId);
2942
- const captionsEnabled = (currentPlaylist == null ? void 0 : currentPlaylist.captions) === true;
2943
- const language = (_c = store.config) == null ? void 0 : _c.language;
2961
+ const captionsEnabled = ((_a = store.manifest) == null ? void 0 : _a.captions) ?? true;
2962
+ const language = (_b = store.userData) == null ? void 0 : _b.language;
2944
2963
  let transcript = currentStep.transcript;
2945
2964
  if (language && currentStep.translations && currentStep.translations[language]) {
2946
2965
  const translatedTranscript = currentStep.translations[language].transcript;
@@ -3044,7 +3063,7 @@ class StateMachineActionHandler {
3044
3063
  });
3045
3064
  log("StateMachineActionHandler: Starting async idle mode video load");
3046
3065
  this.managers.videoManager.loadVideo(videoUrl).then(() => {
3047
- var _a, _b, _c;
3066
+ var _a, _b;
3048
3067
  log("StateMachineActionHandler: Idle mode video loaded successfully, configuring for ambient playback");
3049
3068
  const videoElement = this.managers.videoManager.getVideoElement();
3050
3069
  if (videoElement) {
@@ -3055,10 +3074,8 @@ class StateMachineActionHandler {
3055
3074
  });
3056
3075
  }
3057
3076
  const store = useSaltfishStore.getState();
3058
- const currentPlaylistId = (_a = store.manifest) == null ? void 0 : _a.id;
3059
- const currentPlaylist = (_b = store.backendPlaylists) == null ? void 0 : _b.find((p) => p.id === currentPlaylistId);
3060
- const captionsEnabled = (currentPlaylist == null ? void 0 : currentPlaylist.captions) === true;
3061
- const language = (_c = store.config) == null ? void 0 : _c.language;
3077
+ const captionsEnabled = ((_a = store.manifest) == null ? void 0 : _a.captions) ?? true;
3078
+ const language = (_b = store.userData) == null ? void 0 : _b.language;
3062
3079
  let transcript = currentStep.transcript;
3063
3080
  if (language && currentStep.translations && currentStep.translations[language]) {
3064
3081
  const translation = currentStep.translations[language];
@@ -3973,7 +3990,6 @@ const _TranscriptManager = class _TranscriptManager {
3973
3990
  }
3974
3991
  this.currentTranscript = transcript;
3975
3992
  if (transcript) {
3976
- this.updateCCButtonState(true);
3977
3993
  this.createTranscriptUI();
3978
3994
  this.chunks = transcript.chunks || [];
3979
3995
  this.isNewVideo = true;
@@ -3984,8 +4000,9 @@ const _TranscriptManager = class _TranscriptManager {
3984
4000
  log(`TranscriptManager: Using user preference for captions: ${this.isVisible}`);
3985
4001
  } else {
3986
4002
  this.isVisible = initiallyVisible;
3987
- log(`TranscriptManager: Using backend setting for captions: ${this.isVisible}`);
4003
+ log(`TranscriptManager: Using manifest setting for captions: ${this.isVisible}`);
3988
4004
  }
4005
+ this.updateCCButtonState(true);
3989
4006
  if (this.isVisible) {
3990
4007
  this.showTranscript();
3991
4008
  } else {
@@ -10283,7 +10300,7 @@ const SaltfishPlayer$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.de
10283
10300
  __proto__: null,
10284
10301
  SaltfishPlayer
10285
10302
  }, Symbol.toStringTag, { value: "Module" }));
10286
- const version = "0.2.35";
10303
+ const version = "0.2.37";
10287
10304
  const packageJson = {
10288
10305
  version
10289
10306
  };
@@ -10323,7 +10340,7 @@ function createAPI() {
10323
10340
  // Default to true
10324
10341
  ...config
10325
10342
  };
10326
- info(`Saltfish initialized: analytics=${fullConfig.enableAnalytics}, language=${fullConfig.language || "default"}`);
10343
+ info(`Saltfish initialized: analytics=${fullConfig.enableAnalytics}`);
10327
10344
  isInitializing = true;
10328
10345
  initPromise = player.initialize(fullConfig).then(() => {
10329
10346
  isInitialized = true;