saltfish 0.2.34 → 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.
- package/dist/components/ErrorDisplay.d.ts.map +1 -0
- package/dist/components/LoadingSpinner.d.ts.map +1 -0
- package/dist/components/buttons/ExitButton.d.ts.map +1 -0
- package/dist/components/buttons/MinimizeButton.d.ts.map +1 -0
- package/dist/components/buttons/PlayPauseButton.d.ts.map +1 -0
- package/dist/core/SaltfishPlayer.d.ts.map +1 -0
- package/dist/core/factories/ManagerFactory.d.ts.map +1 -0
- package/dist/core/services/ManagerOrchestrator.d.ts.map +1 -0
- package/dist/core/services/PlayerInitializationService.d.ts.map +1 -0
- package/dist/core/services/PlaylistOrchestrator.d.ts.map +1 -0
- package/dist/core/services/ServiceInterfaces.d.ts.map +1 -0
- package/dist/core/services/StateMachineActionHandler.d.ts.map +1 -0
- package/dist/core/services/UserManagementService.d.ts.map +1 -0
- package/dist/core/stateMachine.d.ts.map +1 -0
- package/dist/core/stateMachineConfig.d.ts.map +1 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/{src/index.d.ts → index.d.ts} +24 -4
- package/dist/index.d.ts.map +1 -0
- package/dist/loaders/PlaylistLoader.d.ts.map +1 -0
- package/dist/managers/ABTestManager.d.ts.map +1 -0
- package/dist/managers/AnalyticsManager.d.ts.map +1 -0
- package/dist/managers/CursorManager.d.ts.map +1 -0
- package/dist/managers/DevicePlaybackHandler.d.ts.map +1 -0
- package/dist/managers/EventManager.d.ts.map +1 -0
- package/dist/managers/InteractionManager.d.ts.map +1 -0
- package/dist/managers/PlaylistManager.d.ts.map +1 -0
- package/dist/managers/SessionManager.d.ts.map +1 -0
- package/dist/managers/ShadowDOMManager.d.ts.map +1 -0
- package/dist/managers/StepTimeoutManager.d.ts.map +1 -0
- package/dist/managers/StorageManager.d.ts.map +1 -0
- package/dist/managers/TranscriptManager.d.ts.map +1 -0
- package/dist/managers/TransitionManager.d.ts.map +1 -0
- package/dist/managers/TriggerManager.d.ts.map +1 -0
- package/dist/managers/UIManager.d.ts.map +1 -0
- package/dist/managers/VideoControlsUI.d.ts.map +1 -0
- package/dist/managers/VideoManager.d.ts.map +1 -0
- package/dist/player.js +2 -2
- package/dist/player.min.js +2 -2
- package/dist/saltfish-playlist-player.es.js +65 -44
- package/dist/saltfish-playlist-player.umd.js +1 -1
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/{src/types → types}/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/updaters/EventUpdater.d.ts.map +1 -0
- package/dist/updaters/UIUpdater.d.ts.map +1 -0
- package/dist/utils/ErrorHandler.d.ts.map +1 -0
- package/dist/utils/deviceDetection.d.ts.map +1 -0
- package/dist/utils/dimensions.d.ts.map +1 -0
- package/dist/utils/languageDetector.d.ts.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/validators/PlaylistValidator.d.ts.map +1 -0
- package/package.json +1 -1
- package/dist/src/components/ErrorDisplay.d.ts.map +0 -1
- package/dist/src/components/LoadingSpinner.d.ts.map +0 -1
- package/dist/src/components/buttons/ExitButton.d.ts.map +0 -1
- package/dist/src/components/buttons/MinimizeButton.d.ts.map +0 -1
- package/dist/src/components/buttons/PlayPauseButton.d.ts.map +0 -1
- package/dist/src/core/SaltfishPlayer.d.ts.map +0 -1
- package/dist/src/core/factories/ManagerFactory.d.ts.map +0 -1
- package/dist/src/core/services/ManagerOrchestrator.d.ts.map +0 -1
- package/dist/src/core/services/PlayerInitializationService.d.ts.map +0 -1
- package/dist/src/core/services/PlaylistOrchestrator.d.ts.map +0 -1
- package/dist/src/core/services/ServiceInterfaces.d.ts.map +0 -1
- package/dist/src/core/services/StateMachineActionHandler.d.ts.map +0 -1
- package/dist/src/core/services/UserManagementService.d.ts.map +0 -1
- package/dist/src/core/stateMachine.d.ts.map +0 -1
- package/dist/src/core/stateMachineConfig.d.ts.map +0 -1
- package/dist/src/core/store.d.ts.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/loaders/PlaylistLoader.d.ts.map +0 -1
- package/dist/src/managers/ABTestManager.d.ts.map +0 -1
- package/dist/src/managers/AnalyticsManager.d.ts.map +0 -1
- package/dist/src/managers/CursorManager.d.ts.map +0 -1
- package/dist/src/managers/DevicePlaybackHandler.d.ts.map +0 -1
- package/dist/src/managers/EventManager.d.ts.map +0 -1
- package/dist/src/managers/InteractionManager.d.ts.map +0 -1
- package/dist/src/managers/PlaylistManager.d.ts.map +0 -1
- package/dist/src/managers/SessionManager.d.ts.map +0 -1
- package/dist/src/managers/ShadowDOMManager.d.ts.map +0 -1
- package/dist/src/managers/StepTimeoutManager.d.ts.map +0 -1
- package/dist/src/managers/StorageManager.d.ts.map +0 -1
- package/dist/src/managers/TranscriptManager.d.ts.map +0 -1
- package/dist/src/managers/TransitionManager.d.ts.map +0 -1
- package/dist/src/managers/TriggerManager.d.ts.map +0 -1
- package/dist/src/managers/UIManager.d.ts.map +0 -1
- package/dist/src/managers/VideoControlsUI.d.ts.map +0 -1
- package/dist/src/managers/VideoManager.d.ts.map +0 -1
- package/dist/src/styles/index.d.ts.map +0 -1
- package/dist/src/types/index.d.ts.map +0 -1
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/updaters/EventUpdater.d.ts.map +0 -1
- package/dist/src/updaters/UIUpdater.d.ts.map +0 -1
- package/dist/src/utils/ErrorHandler.d.ts.map +0 -1
- package/dist/src/utils/deviceDetection.d.ts.map +0 -1
- package/dist/src/utils/dimensions.d.ts.map +0 -1
- package/dist/src/utils/languageDetector.d.ts.map +0 -1
- package/dist/src/utils/logger.d.ts.map +0 -1
- package/dist/src/validators/PlaylistValidator.d.ts.map +0 -1
- /package/dist/{src/components → components}/ErrorDisplay.d.ts +0 -0
- /package/dist/{src/components → components}/LoadingSpinner.d.ts +0 -0
- /package/dist/{src/components → components}/buttons/ExitButton.d.ts +0 -0
- /package/dist/{src/components → components}/buttons/MinimizeButton.d.ts +0 -0
- /package/dist/{src/components → components}/buttons/PlayPauseButton.d.ts +0 -0
- /package/dist/{src/core → core}/SaltfishPlayer.d.ts +0 -0
- /package/dist/{src/core → core}/factories/ManagerFactory.d.ts +0 -0
- /package/dist/{src/core → core}/services/ManagerOrchestrator.d.ts +0 -0
- /package/dist/{src/core → core}/services/PlayerInitializationService.d.ts +0 -0
- /package/dist/{src/core → core}/services/PlaylistOrchestrator.d.ts +0 -0
- /package/dist/{src/core → core}/services/ServiceInterfaces.d.ts +0 -0
- /package/dist/{src/core → core}/services/StateMachineActionHandler.d.ts +0 -0
- /package/dist/{src/core → core}/services/UserManagementService.d.ts +0 -0
- /package/dist/{src/core → core}/stateMachine.d.ts +0 -0
- /package/dist/{src/core → core}/stateMachineConfig.d.ts +0 -0
- /package/dist/{src/core → core}/store.d.ts +0 -0
- /package/dist/{src/loaders → loaders}/PlaylistLoader.d.ts +0 -0
- /package/dist/{src/managers → managers}/ABTestManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/AnalyticsManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/CursorManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/DevicePlaybackHandler.d.ts +0 -0
- /package/dist/{src/managers → managers}/EventManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/InteractionManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/PlaylistManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/SessionManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/ShadowDOMManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/StepTimeoutManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/StorageManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/TranscriptManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/TransitionManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/TriggerManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/UIManager.d.ts +0 -0
- /package/dist/{src/managers → managers}/VideoControlsUI.d.ts +0 -0
- /package/dist/{src/managers → managers}/VideoManager.d.ts +0 -0
- /package/dist/{src/styles → styles}/index.d.ts +0 -0
- /package/dist/{src/types.d.ts → types.d.ts} +0 -0
- /package/dist/{src/updaters → updaters}/EventUpdater.d.ts +0 -0
- /package/dist/{src/updaters → updaters}/UIUpdater.d.ts +0 -0
- /package/dist/{src/utils → utils}/ErrorHandler.d.ts +0 -0
- /package/dist/{src/utils → utils}/deviceDetection.d.ts +0 -0
- /package/dist/{src/utils → utils}/dimensions.d.ts +0 -0
- /package/dist/{src/utils → utils}/languageDetector.d.ts +0 -0
- /package/dist/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src/validators → validators}/PlaylistValidator.d.ts +0 -0
|
@@ -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;
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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}
|
|
10347
|
+
info(`Saltfish initialized: analytics=${fullConfig.enableAnalytics}`);
|
|
10327
10348
|
isInitializing = true;
|
|
10328
10349
|
initPromise = player.initialize(fullConfig).then(() => {
|
|
10329
10350
|
isInitialized = true;
|