Files
return-youtube-dislike/Extensions/combined/src/patreon.js
T

79 lines
2.5 KiB
JavaScript
Raw Normal View History

import { initPremiumAnalytics, teardownPremiumAnalytics, updatePremiumSession } from "./premiumAnalytics";
import {
initPremiumTeaser,
setTeaserSuppressed,
TEASER_SUPPRESSION_REASON_PREMIUM,
} from "./premiumAnalytics/teaser";
let patreonState = {
authenticated: false,
user: null,
sessionToken: null,
};
function initPatreonFeatures() {
initPremiumTeaser();
chrome.storage.sync.get(["patreonAuthenticated", "patreonUser", "patreonSessionToken"], (data) => {
if (data.patreonAuthenticated && data.patreonUser) {
patreonState.authenticated = true;
patreonState.user = data.patreonUser;
patreonState.sessionToken = data.patreonSessionToken;
updatePremiumSession({
token: patreonState.sessionToken,
active: patreonState.user?.hasActiveMembership,
membershipTier: patreonState.user?.membershipTier,
});
enablePremiumFeatures();
}
});
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.message === "patreon_status_changed") {
patreonState.authenticated = request.authenticated;
patreonState.user = request.user || null;
if (request.authenticated) {
patreonState.sessionToken = request.sessionToken ?? patreonState.sessionToken;
updatePremiumSession({
token: patreonState.sessionToken,
active: patreonState.user?.hasActiveMembership,
membershipTier: patreonState.user?.membershipTier,
});
enablePremiumFeatures();
} else {
patreonState.sessionToken = null;
updatePremiumSession({ token: null, active: false });
disablePremiumFeatures();
}
}
});
}
function enablePremiumFeatures() {
const tier = patreonState.user?.membershipTier;
const hasActiveMembership = patreonState.user?.hasActiveMembership;
if (hasActiveMembership && tier === "premium") {
setTeaserSuppressed(true, TEASER_SUPPRESSION_REASON_PREMIUM);
initPremiumAnalytics();
}
}
function disablePremiumFeatures() {
const premiumElements = document.querySelectorAll(".ryd-premium-feature");
premiumElements.forEach((el) => el.remove());
teardownPremiumAnalytics();
setTeaserSuppressed(false, TEASER_SUPPRESSION_REASON_PREMIUM);
}
function isPatreonUser() {
return patreonState.authenticated && patreonState.user?.hasActiveMembership;
}
function getPatreonTier() {
return patreonState.user?.membershipTier || "none";
}
export { initPatreonFeatures, isPatreonUser, getPatreonTier, patreonState };