saltfish 0.3.80 → 0.3.82
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/SaltfishPlayer.d.ts +6 -0
- package/dist/core/SaltfishPlayer.d.ts.map +1 -1
- package/dist/core/services/PlayerInitializationService.d.ts.map +1 -1
- package/dist/core/store.d.ts.map +1 -1
- package/dist/managers/TransitionManager.d.ts.map +1 -1
- package/dist/managers/TriggerManager.d.ts +6 -0
- package/dist/managers/TriggerManager.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 +63 -4
- package/dist/saltfish-playlist-player.umd.js +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1264,6 +1264,13 @@ const saltfishStore = createStore()(
|
|
|
1264
1264
|
state.user = user;
|
|
1265
1265
|
});
|
|
1266
1266
|
},
|
|
1267
|
+
mergeUserFields: (fields) => {
|
|
1268
|
+
set2((state) => {
|
|
1269
|
+
if (state.user) {
|
|
1270
|
+
Object.assign(state.user, fields);
|
|
1271
|
+
}
|
|
1272
|
+
});
|
|
1273
|
+
},
|
|
1267
1274
|
setUserData: (userData) => {
|
|
1268
1275
|
set2((state) => {
|
|
1269
1276
|
state.userData = userData;
|
|
@@ -1784,7 +1791,7 @@ __publicField(ErrorHandler, "DEFAULT_OPTIONS", {
|
|
|
1784
1791
|
shouldTriggerEvent: false,
|
|
1785
1792
|
shouldDestroy: false
|
|
1786
1793
|
});
|
|
1787
|
-
const VERSION = "0.
|
|
1794
|
+
const VERSION = "0.3.81";
|
|
1788
1795
|
class ShareLinkService {
|
|
1789
1796
|
/**
|
|
1790
1797
|
* Detects if the current URL contains a saltfish-share-id parameter
|
|
@@ -2129,6 +2136,9 @@ class PlayerInitializationService {
|
|
|
2129
2136
|
this.currentUserData = userData;
|
|
2130
2137
|
this.isAnonymousUser = false;
|
|
2131
2138
|
this.lastUserDataFetchTimestamp = Date.now();
|
|
2139
|
+
if (data.firstIdentifiedAt) {
|
|
2140
|
+
store.mergeUserFields({ firstIdentifiedAt: data.firstIdentifiedAt });
|
|
2141
|
+
}
|
|
2132
2142
|
store.setUserData({
|
|
2133
2143
|
watchedPlaylists: data.watchedPlaylists || {},
|
|
2134
2144
|
language: data.language
|
|
@@ -2471,6 +2481,9 @@ class PlayerInitializationService {
|
|
|
2471
2481
|
const data = await response.json();
|
|
2472
2482
|
if (data.success) {
|
|
2473
2483
|
this.lastUserDataFetchTimestamp = Date.now();
|
|
2484
|
+
if (data.firstIdentifiedAt) {
|
|
2485
|
+
store.mergeUserFields({ firstIdentifiedAt: data.firstIdentifiedAt });
|
|
2486
|
+
}
|
|
2474
2487
|
store.setUserData({
|
|
2475
2488
|
watchedPlaylists: data.watchedPlaylists || {},
|
|
2476
2489
|
language: data.language
|
|
@@ -9663,6 +9676,9 @@ class TransitionManager {
|
|
|
9663
9676
|
if (this.isStateMachineValidating) {
|
|
9664
9677
|
return;
|
|
9665
9678
|
}
|
|
9679
|
+
if (this.triggerManager) {
|
|
9680
|
+
this.triggerManager.clearTriggeredForNonMatchingUrls();
|
|
9681
|
+
}
|
|
9666
9682
|
const urlPathTransitions = Array.from(this.activeTransitions.entries()).filter(([_, transition]) => {
|
|
9667
9683
|
var _a;
|
|
9668
9684
|
return ((_a = transition.data) == null ? void 0 : _a.type) === "url-path";
|
|
@@ -9679,6 +9695,9 @@ class TransitionManager {
|
|
|
9679
9695
|
if (!hasValidTransition) {
|
|
9680
9696
|
const isValidUrl = this.validateCurrentStepUrl();
|
|
9681
9697
|
if (!isValidUrl) {
|
|
9698
|
+
if (this.triggerManager) {
|
|
9699
|
+
this.triggerManager.evaluateAllTriggers();
|
|
9700
|
+
}
|
|
9682
9701
|
return;
|
|
9683
9702
|
}
|
|
9684
9703
|
}
|
|
@@ -9994,8 +10013,12 @@ class TransitionManager {
|
|
|
9994
10013
|
log(`TransitionManager: Expected pattern: '${urlRequirement.pattern}' (matchType: ${urlRequirement.matchType})`);
|
|
9995
10014
|
this.cleanupTransitions();
|
|
9996
10015
|
const saltfishPlayer = window._saltfishPlayer;
|
|
9997
|
-
if (saltfishPlayer && typeof saltfishPlayer.
|
|
9998
|
-
saltfishPlayer.
|
|
10016
|
+
if (saltfishPlayer && typeof saltfishPlayer.closePlaylist === "function") {
|
|
10017
|
+
saltfishPlayer.closePlaylist();
|
|
10018
|
+
} else {
|
|
10019
|
+
if (saltfishPlayer && typeof saltfishPlayer.destroy === "function") {
|
|
10020
|
+
saltfishPlayer.destroy();
|
|
10021
|
+
}
|
|
9999
10022
|
}
|
|
10000
10023
|
}
|
|
10001
10024
|
/**
|
|
@@ -10925,6 +10948,32 @@ class TriggerManager {
|
|
|
10925
10948
|
this.triggeredPlaylistsSet.delete(playlistId);
|
|
10926
10949
|
}
|
|
10927
10950
|
}
|
|
10951
|
+
/**
|
|
10952
|
+
* Clears triggered state for playlists whose URL condition no longer matches the current URL.
|
|
10953
|
+
* This allows re-triggering when the user navigates back to a matching URL via SPA navigation.
|
|
10954
|
+
* Only clears playlists that have a URL trigger condition — non-URL triggers keep their state.
|
|
10955
|
+
*/
|
|
10956
|
+
clearTriggeredForNonMatchingUrls() {
|
|
10957
|
+
var _a;
|
|
10958
|
+
if (this.triggeredPlaylistsSet.size === 0) {
|
|
10959
|
+
return;
|
|
10960
|
+
}
|
|
10961
|
+
const triggeredIds = Array.from(this.triggeredPlaylistsSet);
|
|
10962
|
+
log(`TriggerManager: clearTriggeredForNonMatchingUrls - checking ${triggeredIds.length} triggered playlists: [${triggeredIds.map((id) => id.substring(0, 8)).join(", ")}]`);
|
|
10963
|
+
for (const playlistId of triggeredIds) {
|
|
10964
|
+
const playlist = this.triggeredPlaylists.find((p) => p.id === playlistId);
|
|
10965
|
+
if (!((_a = playlist == null ? void 0 : playlist.triggers) == null ? void 0 : _a.url)) {
|
|
10966
|
+
log(`TriggerManager: Playlist ${playlistId.substring(0, 8)} has no URL trigger, keeping triggered state`);
|
|
10967
|
+
continue;
|
|
10968
|
+
}
|
|
10969
|
+
const urlStillMatches = this.evaluateURLCondition(playlist.triggers);
|
|
10970
|
+
if (!urlStillMatches) {
|
|
10971
|
+
this.triggeredPlaylistsSet.delete(playlistId);
|
|
10972
|
+
} else {
|
|
10973
|
+
log(`TriggerManager: Playlist ${playlistId.substring(0, 8)} URL still matches, keeping triggered state`);
|
|
10974
|
+
}
|
|
10975
|
+
}
|
|
10976
|
+
}
|
|
10928
10977
|
/**
|
|
10929
10978
|
* Resets the triggered playlists tracking
|
|
10930
10979
|
* Useful for testing or when user context changes
|
|
@@ -12778,6 +12827,16 @@ const _SaltfishPlayer = class _SaltfishPlayer {
|
|
|
12778
12827
|
resetPlaylist() {
|
|
12779
12828
|
this.playlistOrchestrator.resetPlaylist();
|
|
12780
12829
|
}
|
|
12830
|
+
/**
|
|
12831
|
+
* Close the current playlist while preserving the trigger system.
|
|
12832
|
+
* Used when a playlist needs to be stopped (e.g. URL validation failure)
|
|
12833
|
+
* but triggers should keep monitoring for future URL changes.
|
|
12834
|
+
*/
|
|
12835
|
+
closePlaylist() {
|
|
12836
|
+
this.managerOrchestrator.cleanupPlaylist();
|
|
12837
|
+
const store = useSaltfishStore.getState();
|
|
12838
|
+
store.resetForNewPlaylist();
|
|
12839
|
+
}
|
|
12781
12840
|
/**
|
|
12782
12841
|
* Destroy the player and clean up all resources
|
|
12783
12842
|
*/
|
|
@@ -12844,7 +12903,7 @@ const SaltfishPlayer$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.de
|
|
|
12844
12903
|
__proto__: null,
|
|
12845
12904
|
SaltfishPlayer
|
|
12846
12905
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
12847
|
-
const version = "0.3.
|
|
12906
|
+
const version = "0.3.82";
|
|
12848
12907
|
const packageJson = {
|
|
12849
12908
|
version
|
|
12850
12909
|
};
|