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.
- package/dist/core/services/PlayerInitializationService.d.ts.map +1 -1
- package/dist/core/services/StateMachineActionHandler.d.ts.map +1 -1
- package/dist/core/services/UserManagementService.d.ts.map +1 -1
- package/dist/index.d.ts +24 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/managers/TranscriptManager.d.ts.map +1 -1
- package/dist/player.js +2 -2
- package/dist/player.min.js +2 -2
- package/dist/saltfish-playlist-player.es.js +71 -54
- package/dist/saltfish-playlist-player.umd.js +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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,
|
|
2154
|
+
store.identifyUser(userId, processedUserData);
|
|
2143
2155
|
this.managers.analyticsManager.setUser({
|
|
2144
2156
|
id: userId,
|
|
2145
|
-
...
|
|
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,
|
|
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, { ...
|
|
2189
|
+
store.identifyUser(userId, { ...processedUserData, __isAnonymous: true });
|
|
2169
2190
|
this.managers.analyticsManager.setUser({
|
|
2170
2191
|
id: userId,
|
|
2171
|
-
...
|
|
2192
|
+
...processedUserData
|
|
2172
2193
|
});
|
|
2173
|
-
await this.playerInitializationService.loadAnonymousUserData(userId,
|
|
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.
|
|
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
|
|
2959
|
+
var _a, _b;
|
|
2939
2960
|
const store = useSaltfishStore.getState();
|
|
2940
|
-
const
|
|
2941
|
-
const
|
|
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
|
|
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
|
|
3059
|
-
const
|
|
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
|
|
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.
|
|
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}
|
|
10343
|
+
info(`Saltfish initialized: analytics=${fullConfig.enableAnalytics}`);
|
|
10327
10344
|
isInitializing = true;
|
|
10328
10345
|
initPromise = player.initialize(fullConfig).then(() => {
|
|
10329
10346
|
isInitialized = true;
|